2011-12-01 23 views
13

¿Cómo puedo eliminar caracteres de una cadena de una manera multibyte, como caracteres de puntuación, comillas, guiones, etc.?Regex para eliminar caracteres no alfanuméricos de cadenas UTF8

estaré trabajando con el aporte de muchos idiomas diferentes y me pregunto si hay algo que me puede ayudar con esto

Gracias

+0

Usted quiere mantener sólo una ''-z' y 0-9'? ¿O también están todos los personajes especiales de diferentes idiomas? – Marcus

+0

explicando por qué mi resultado es un mejor enfoque que se sugiere. –

+0

@Marcus. Necesito mantener los caracteres Unicode – Thomas

Respuesta

24

están los thingys de clase de caracteres Unicode que se pueden utilizar:

Para hacer coincidir cualquier símbolo que no sea una letra, puede usar \PL+, la negación de \p{L}. Para no eliminar espacios, use una clase de caracteres como [^\pL\s]+. O simplemente elimina la puntuación con \pP+

Bueno, y obviamente no olvides el modificador de expresiones regulares /u.

+0

Creo que este tiene potencial. Necesito investigar. Gracias mario – Thomas

+2

[^ \ pL \ s] + es el ganador – Thomas

+0

no sabía que las secuencias de escape funcionan entre paréntesis '[]'. Gracias –

0

Tal vez este sea útil?

$newstring = preg_replace('/[^0-9a-zA-Z\s]/', $oldstring); 
+2

Esto eliminará los caracteres no ASCII también. No quiero esto – Thomas

1

He utilizado este:

$clean = preg_replace("/[^\p{L}|\p{N}]+/u", " ", $raw); 
$clean = preg_replace("/[\p{Z}]{2,}/u", " ", $clean); 
+0

¿Puede describir exactamente qué está pasando aquí? –

Cuestiones relacionadas