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
isignifica mayúsculas y minúsculas. -
^significa, no comienza con. -
/dcoincide con cualquier dígito. -
azcoincide con todos los caracteres entrez. Debido al parámetroi, no tiene que especificarazyAZ. - Después de
/dhay 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/