2012-07-04 34 views
50

¿Cómo puedo eliminar todos los caracteres no alfanuméricos de una cadena en PHP?Eliminar todos los caracteres no alfanuméricos mediante preg_replace

Este es el código que estoy usando actualmente:

$url = preg_replace('/\s+/', '', $string); 

Sólo se reemplaza espacios en blanco.

+1

posible duplicado de [¿Cómo elimino caracteres no alfanuméricos en una cadena? (incluidos ß, Ê, etc.)] (http://stackoverflow.com/questions/7271607/how-do-i-remove-non-alphanumeric-characters-in-a-string-including-ss-e-etc) – mario

+0

@mario: Eso es un poco diferente ya que trata con Unicode. Estoy seguro de que existe un duplicado perfecto si ... –

+0

posible duplicado de [Eliminar caracteres no alfanuméricos] (http://stackoverflow.com/questions/659025/remove-non-alphanumeric-characters) – trejder

Respuesta

101
$url = preg_replace('/[^\da-z]/i', '', $string); 
+6

[Esta respuesta es compatible con Unicode ] (http://stackoverflow.com/a/17151182/99923) – Xeoncross

+10

En caso de que alguien más se confundiera momentáneamente por el comentario de Xeoncross a primera vista, su punto era que la respuesta * no * admite caracteres Unicode. Pero la solución en Xeoncross 'link * does *. – orrd

4
preg_replace('/[\s\W]+/', '', $string) 

parece funcionar, en realidad el ejemplo fue en la documentación de PHP en preg_replace

+1

Tenga en cuenta que esto * mantendrá * los caracteres de subrayado ya que se consideran caracteres de palabra y también guarda espacios –

+0

No sabía sobre guiones bajos, pero no está manteniendo espacios. – lisovaccaro

3
$alpha = '0-9a-z'; // what to KEEP 
$regex = sprintf('~[^%s]++~i', preg_quote($alpha, '~')); // case insensitive 

$string = preg_replace($regex, '', $string); 
13

Al principio tomar esta es la forma que lo haría

$str = '[email protected]#[email protected]#$^@#$Hello%#$'; 

$outcome = preg_replace("/[^a-zA-Z0-9]/", "", $str); 

var_dump($outcome); 
//string(11) "qwertyHello" 

Esperanza esta ayuda!

+1

esto no funcionará para letras no latinas –

12
No

seguro de por qué nadie más ha sugerido esto, pero esto parece ser la expresión regular más sencilla:

preg_replace("/\W|_/", "", $string) 

Se puede ver en acción aquí, también: http://phpfiddle.org/lite/code/0sg-314

+1

El más simple y eficiente al mismo tiempo es 'preg_replace ("/[\ W _] +/"," ", $ string)'. –

1

que puede utilizar,

$url = preg_replace('/[^\da-z]/i', '', $string); 

Se puede utilizar para caracteres Unicode,

$url = preg_replace("/[^[:alnum:][:space:]]/u", '', $string); 
Cuestiones relacionadas