php - preg_replace - ¿Cómo eliminar caracteres no alfanuméricos?
regex preg_match_all (9)
Aquí hay un regex muy simple para eso:
/W|_
y se usa según lo necesite (con un delimitador de barra /
barra).
preg_replace("//W|_/", '''', $string);
Pruébelo aquí con esta gran herramienta que explica lo que está haciendo la expresión regular:
Necesito eliminar todos los caracteres de una cadena que no está en un conjunto az AZ 0-9
o que no son espacios.
¿Alguien tiene una función para hacer esto?
Para los personajes Unicode, es:
preg_replace("/[^[:alnum:][:space:]]/u", '''', $string);
Parece que ya casi sabía lo que quería hacer, básicamente lo definió como una expresión regular.
preg_replace("/[^A-Za-z0-9 ]/", '''', $string);
Si necesita admitir otros idiomas, en lugar de la AZ típica, puede usar lo siguiente:
preg_replace(''/[^/p{L}/p{N} ]+/'', '''', $string);
-
[^/p{L}/p{N} ]
define una clase de caracteres negados (coincidirá con un carácter que no está definido) de:-
/p{L}
: una carta de cualquier idioma. -
/p{N}
: un carácter numérico en cualquier script. : un personaje espacial.
-
-
+
codiciosamente coincide con la clase de personaje entre 1 y tiempos ilimitados .
Esto conservará las letras y números de otros idiomas y scripts, así como AZ:
preg_replace(''/[^/p{L}/p{N} ]+/'', '''', ''hello-world''); // helloworld
preg_replace(''/[^/p{L}/p{N} ]+/'', '''', ''abc@~#123-+=öäå''); // abc123öäå
preg_replace(''/[^/p{L}/p{N} ]+/'', '''', ''你好世界!@£$%^&*()''); // 你好世界
Nota: Esta es una pregunta muy antigua, pero aún relevante. Respondo exclusivamente para proporcionar información complementaria que pueda ser útil para futuros visitantes.
También estaba buscando la respuesta y mi intención era limpiar a todos los que no eran alfa y no debería tener más de un espacio.
Entonces, modifiqué la respuesta de Alex a esto, y esto me funciona preg_replace(''/[^az|/s+]+/i'', '' '', $name)
El regex anterior convirtió sy8ed sirajul7_islam
a sy ed sirajul islam
Explicación: regex comprobará NOT ANY desde a hasta z en el caso de que no sea sensible o más de un espacio en blanco, y se convertirá en un solo espacio.
yo uso esto:
//to remove non english character
$str = preg_replace(''/[^/00-/255]+/u'', '''', $str);
La expresión regular es tu respuesta.
$str = preg_replace(''/[^a-z/d ]/i'', '''', $str);
- La
i
significa mayúsculas y minúsculas. -
^
significa, no comienza con. -
/d
coincide con cualquier dígito. -
az
coincide con todos los caracteres entrez
. Debido al parámetroi
, no tiene que especificaraz
yAZ
. - Después de
/d
hay un espacio, entonces se permiten espacios en esta expresión regular.
[/W_]+
$string = preg_replace("/[/W_]+/u", '''', $string);
Selecciona todo no AZ, az, 0-9 y elimínalo.
Vea el ejemplo aquí: https://regexr.com/3h1rj
preg_replace("//W+/", '''', $string)
Puedes probarlo aquí: http://regexr.com/