2012-03-15 13 views
10

¿Cómo puedo unir todos los caracteres "especiales" (como +_*&^%$#@!~) excepto el número - en PHP?¿Cómo combinar con expresiones regulares todos los caracteres especiales excepto "-" en PHP?

Sé que \W coincidirá con todos los caracteres "especiales" incluyendo el -.

¿Alguna sugerencia en consideración a las letras Unicode?

+7

*** * Todos los personajes son * “especial” *** Di lo que quieres decir!. – tchrist

+0

caracteres especiales como + _) (* & ^% $ # @! ~, No de ningún idioma ... – CaTz

+1

English ciertamente usa la mayoría de esos caracteres. Muchos de ellos se usan en muchos idiomas. Algunos no lo son. significa que aún no ha definido "especialidad". ** ¿Cuál es la propiedad de carácter Unicode para "especialidad" ???? ** – tchrist

Respuesta

30
  • [^-] no es el carácter especial que desea
  • [\W] son todos caracteres especiales como usted sabe
  • [^\w] son todos personajes especiales también - ¿suena justo?

Así que, por lo tanto [^\w-] es la combinación de ambos: Todos los caracteres "especiales", pero sin -.

+0

funciona también, gracias, por alguna razón no coincide con _ _ char ... pero me las arreglé para eludir eso, – CaTz

+0

¿Qué es lo que piensas que '[\ W]' hace que '\ W' no? – tchrist

+0

@tchrist: ¿Qué quieres decir? No creo eso. – hakre

3

Puede probar este patrón

([^a-zA-Z-])

Este debe coincidir con todos los caracteres que no son a-z y la -

+0

no es bueno, porque puede haber letras en Unicode ... de todos modos, encontró el ¡responder! [^ \ p {L} - \ d] – CaTz

+0

Teniendo en cuenta que usted era muy amplio con su pregunta, no había un ámbito específico de caracteres establecidos, así que esta es mi suposición. –

4
  • \pL coincide con cualquier carácter con la propiedad de caracteres Unicode Letter, que es un grupo importante categoría general; es decir, coincide con [\p{Ll}\p{Lt}\p{Lu}\p{Lm}\p{Lo}].
  • \pN coincide con cualquier carácter con la propiedad de carácter Unicode Number, que es un grupo de categoría general importante; es decir, coincide con [\p{Nd}\p{Nl}\p{No}].
  • Tenga en cuenta que la propiedad de carácter Unicode Alphabetic también incluye ciertas marcas de combinación como U + 0345 ◌ ᴄᴏᴍʙɪɴɪɴɢ ɢʀᴇᴇᴋ ʏᴘᴏɢᴇɢʀᴀᴍᴍᴇɴɪ. Le sugiero que también incluya \pM, que coincide con cualquier carácter con la propiedad de carácter Unicode Mark, que es un grupo de categoría general importante; es decir, coincide con [\p{Mn}\p{Me}\p{Mc}].
  • Carácter U + 002D ʜʏᴘʜᴇɴ-ᴍɪɴᴜꜱ es probablemente el - al que te refieres.
  • Nota sin embargo que v6.1 Unicode tiene 27 caracteres con la propiedad de caracteres Unicode Dash, incluyendo caracteres comunes tales como U + ʜʏᴘʜᴇɴ 2010, U + 2013 ᴇɴ ᴅᴀꜱʜ, U + 2014 ᴇᴍ ᴅᴀꜱʜ, y U + 2212 ᴍɪɴᴜꜱ ꜱɪɢɴ . Si realmente quiere incluir o excluir esos, no tengo ni idea.

Teniendo en cuenta todo esto, no es improbable que desea algo como:

[^\pL\pN\pM\x2D\x{2010}-\x{2015}\x{2212}] 
Cuestiones relacionadas