Necesito eliminar todos los caracteres de una cadena que no están en a-z A-Z 0-9
conjunto 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
\w
incluye\d
y por lo tanto\d
es innecesario. Además, esto está mal porque también dejará guiones bajos en la cadena resultante (que también se incluye en\w
).i
realmente necesaria la bandera aquí[:alnum:]
ya que cubre ambos casos?La expresión regular es tu respuesta.
i
soportes para mayúsculas y minúsculas.^
significa, no comienza con.\d
coincide con cualquier dígito.a-z
coincide con todos los caracteres entrea
yz
. Debido ali
parámetro que no tiene que especificara-z
yA-Z
.\d
haya 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
/u
bandera; 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
\W
es el inverso de los\w
cuales son los caracteresA-Za-z0-9_
. Entonces\W
coincidirá 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. Elu
indicador 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_islam
ensy ed sirajul islam
Explicació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 .