regular preg_replace preg_match_all preg_match pattern online examples ejemplos php regex string

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:

http://www.regexr.com/

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 entre z . Debido al parámetro i , no tiene que especificar az y AZ .
  • 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