necesito limpiar un string de cualquier signo que no sea letra o numero
por ejemplo
$str = '¿cual es la raiz de 42?';
a
$str = 'cual es la raiz de 42';
alguna idea de como hacerlo de la forma mas eficiente posible?
function comprobar_cadena($str) {
$caracteres_permitidos = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
for ($i = 0; $i < strlen($str); $i++) {
if (strpos($caracteres_permitidos, substr($str,$i,1)) == FALSE) {
return false;
} else {
return true;
}
}
}
Lo llamás así:
$variable = comprobar_cadena($str);
if ($variable == TRUE) {
echo "Existen signos no permitidos";
} else {
echo "Todo ok";
}
Gracias!! estaba buscando algo mas estilo python, pero php se queda corto en ese aspecto =<
y esque demaciadas comparaciones causa mas tiempo de ejecuccion y de procesamiento.
almenos es un codigo limpio... ^^
muchas gracias
Prueba mejor con una expresión regular y sustituye los resultados por ''.
Con esta puede que te sirva, haz pruebas y ya nos dirás.
$reg = '/\W\s/g';
$str = 'Lo que tengas ? que * buscar';
$rep = '';
$result = preg_replace($reg, $rep, $str);
La expresión es muy simple y se puede mejorar, pero bueno para un primer apaño quizá te sirva.
Te dejo esta página, que a lo mejor te sirve de ayuda para creartelas.
http://gskinner.com/RegExr/
Un saludo
function alfanumeric($string){
$string=ereg_replace("[^A-Za-z0-9]", "", $string);
return $string;
}
Recibe una cadena y devuelve la cadena sólo con símbolos alfanuméricos, nada de caracteres especiales. Su uso.
$str = alfanumeric("¿cual es la raiz de 42?");
echo $str;
Devuelve: cual es la raiz de 42
@Spider-Net, creo que falta agregarle un \s para los espacios, no?
Mejor usar preg_replace, ya que ereg_replace ésta obsoleta.
/(?i)(?:[^\w]*)(?-i)/
Puedes usar este patrón junto a preg_replace().
Que en vez de eliminar caracteres especifico, elimino cualquier carácter que no sea alfanumérico (http://es.wikipedia.org/wiki/Alfanum%C3%A9rico).
Ejemplo:
<?php
echo preg_replace('/(?i)(?:[^\w]*)(?-i)/','','h[oL=a');
?>
Salida:
hoLa
Saludos.
Yo hice esta función que crea un alias de un texto. Lo uso para cuando voy a ingresar un dato a la base de datos (un post de un blog por ejemplo, guardo el nombre Un post de programación!! [PHP] y el alias un-post-de-programacion-php). Te dejo la función y editala a tu gusto, pero practicamente utiliza lo que ya te dijeron:
Esta es la función para que pegues en el archivo
function txtToAlias($flotaTitle='',$flotaLength=false){
preg_match_all('/[a-z0-9\-]+/',strtr(preg_replace('/\s+/','-',trim(strtolower($flotaTitle))), "àáâãäåèéêëìíîïòóôõöùúûüñ", "aaaaaaeeeeiiiiooooouuuun"),$return);
return ($flotaLength)?substr(implode($return[0]),0,$flotaLength):implode($return[0]);
}
Esta está resaltada pero hay problemas con àáâãäåèéêëìíîïòóôõöùúûüñ
function txtToAlias($flotaTitle='',$flotaLength=false){
preg_match_all('/[a-z0-9\-]+/',strtr(preg_replace('/\s+/','-',trim(strtolower($flotaTitle))), "aaaaaaeeeeiiiiooooouuuun", "aaaaaaeeeeiiiiooooouuuun"),$return);
return ($flotaLength)?substr(implode($return[0]),0,$flotaLength):implode($return[0]);
}
pues IMHO casi la mejor solucion es la de kasi agregando \d para los numeros :P pero negativo eh ¬¬
$reg = '/[^\w\d\s]/i';
$buffer = 'asdf8a7s6d5f4asdf#456789(&335GG/X>%X57';
preg_replace($reg, '', $buffer);
devuelve:
Citarasdf8a7s6d5f4asdf456789335GGXX57
agregale espacios y sigue funcionando :P
Como narices esto:
/(?i)(?:[^\w]*)(?-i)/
puede referirse a letras y números :-|
/(?i)(?:[^\w\s]*)(?-i)/
Es parecida a la de Nakp, la diferencia es que hago que sea insensible a mayúscula y minúscula desde el mismo patrón, así no tengo que agregarle el operador i. Así hago el patrón mas portátil xD.
Nose porque le agregan el \w\d si con \w basta...
Saludos.
w es alfanumerico? Crei que eran solo letras x'D en fin :P es mas facil la que puse a me lo parece jajaja
Si, es alfanumérico.