limpiar un str de signos raros

Iniciado por Kase, 12 Abril 2011, 06:21 AM

0 Miembros y 1 Visitante están viendo este tema.

Kase

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?

Feedeex

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";
}

Kase

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

Kasi

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.
Código (php) [Seleccionar]

$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

Spider-Net

Código (php) [Seleccionar]
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.

Código (php) [Seleccionar]
$str = alfanumeric("¿cual es la raiz de 42?");
echo $str;


Devuelve: cual es la raiz de 42

Shell Root

#5
@Spider-Net, creo que falta agregarle un \s para los espacios, no?
Mejor usar preg_replace, ya que ereg_replace ésta obsoleta.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

~ Yoya ~

Código (javascript) [Seleccionar]
/(?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 .

Ejemplo:

Código (php) [Seleccionar]
<?php
echo preg_replace('/(?i)(?:[^\w]*)(?-i)/','','h[oL=a');
?>



Salida:
hoLa

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Castg!

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 àáâãäåèéêëìíîïòóôõöùúûüñ
Código (php) [Seleccionar]

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]);
}

Nakp

pues IMHO casi la mejor solucion es la de kasi agregando \d para los numeros :P pero negativo eh ¬¬

Código (php) [Seleccionar]
$reg = '/[^\w\d\s]/i';
$buffer = 'asdf8a7s6d5f4asdf#456789(&335GG/X>%X57';

preg_replace($reg, '', $buffer);


devuelve:
Citarasdf8a7s6d5f4asdf456789335GGXX57

agregale espacios y sigue funcionando :P
Ojo por ojo, y el mundo acabará ciego.

dimitrix

Como narices esto:
/(?i)(?:[^\w]*)(?-i)/

puede referirse a letras y números :-|