Necesito eliminar todos los caracteres de una cadena que no están en a-z A-Z 0-9conjunto o no son espacios.
¿Alguien tiene una función para hacer esto?
Parece que ya casi sabías lo que querías hacer, básicamente lo definiste como una expresión regular.
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
preg_replace('/[^A-Za-z0-9 ]/', '', $string);Para los caracteres unicode, es:
fuente
\wincluye\dy por lo tanto\des innecesario. Además, esto está mal porque también dejará guiones bajos en la cadena resultante (que también se incluye en\w).irealmente necesaria la bandera aquí[:alnum:]ya que cubre ambos casos?La expresión regular es tu respuesta.
isoportes para mayúsculas y minúsculas.^significa, no comienza con.\dcoincide con cualquier dígito.a-zcoincide con todos los caracteres entreayz. Debido aliparámetro que no tiene que especificara-zyA-Z.\dhaya un espacio, se permiten espacios en esta expresión regular.fuente
Aquí hay una expresión regular realmente simple para eso:
y se usa según lo necesite (con un
/delimitador de barra diagonal).Pruébelo aquí con esta gran herramienta que explica lo que está haciendo la expresión regular:
http://www.regexr.com/
fuente
/ubandera; de lo contrario, también se eliminarán las letras que no sean ascii.[\W_]+Si necesita admitir otros idiomas, en lugar del AZ típico, puede usar lo siguiente:
[^\p{L}\p{N} ]define una clase de caracteres negada (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 e ilimitado veces.Esto preservará letras y números de otros idiomas y scripts, así como de AZ:
Nota: Esta es una pregunta muy antigua, pero aún relevante. Estoy respondiendo únicamente para proporcionar información complementaria que pueda ser útil para futuros visitantes.
fuente
Selecciona todo, no AZ, az, 0-9 y lo elimina.
Ver ejemplo aquí: https://regexr.com/3h1rj
fuente
\Wes el inverso de los\wcuales son los caracteresA-Za-z0-9_. Entonces\Wcoincidirá con cualquier personaje que no lo seaA-Za-z0-9_y los eliminará. El[]es un límite de juego de caracteres . El+es redundante en un límite de juego de caracteres, pero normalmente significa 1 o más caracteres. Eluindicador expande la expresión para incluir compatibilidad con caracteres unicode, lo que significa que no eliminará caracteres más allá del código de caracteres 255 comoª²³µ. Ejemplo de varios usos 3v4l.org/hSVV5 con caracteres unicode y ascii.Puedes probarlo aquí: http://regexr.com/
fuente
Estaba buscando la respuesta también y mi intención era limpiar cada no alfa y no debería tener más de un espacio.
Entonces, modifiqué la respuesta de Alex a esto, y esto está funcionando para mí.
preg_replace('/[^a-z|\s+]+/i', ' ', $name)La expresión regular anterior se convirtió
sy8ed sirajul7_islamensy ed sirajul islamExplicación: la expresión regular verificará NO CUALQUIERA de la a a la z en caso de que sea insensible o más de un espacio en blanco, y se convertirá en un solo espacio.
fuente
Puede dividir la cadena en caracteres y filtrarla.
fuente
preg_replace()llamada simple y simple .