2012-04-26 15 views
8

En A comprehensive regex for phone number validation, la respuesta aceptada tiene una serie de comentarios. Uno de los comentarios, por @jcmcbeth, sugiere la siguiente expresión regular simple de usar para obtener los dígitos del número de teléfono presentado por un usuario:¿Por qué el signo de exclamación en otra publicación de StackOverflow que implica el número de teléfono REGEX?

string.replace("[^\d+!x]", "") 

Inmediatamente después del comentario con esto sugería expresión regular, otro interlocutor pregunta why the !x part?, que luego se responde en el siguiente comentario: The !x is there to keep any "x" character from getting stripped.

Esto tiene sentido para mí, a excepción del signo de exclamación !. Al mirar la documentación de las clases de caracteres en expresiones regulares, no veo que el signo de exclamación sea un carácter especial, y no me parece que el x requiera un carácter especial que lo preceda. Además, de la discusión en la pregunta vinculada, no veo ningún comentario que indique que un signo de exclamación podría ser parte de un número de teléfono (lo que explicaría su inclusión en la clase de caracteres negada).

¿Puede alguien explicarme por qué está presente el signo de exclamación? Gracias.

+2

porque las expresiones regulares son emocionantes! – bta

Respuesta

7

Tiene toda la razón, el x es suficiente. ! solo coincide con un literal !, dentro de una clase de personaje o fuera. El único lugar que tiene un significado especial es cuando es parte de una mirada negativa hacia adelante o una mirada negativa detrás.

-3

Seguramente [^\d+!x] significa "NO '\', NO 'd', NO '+', NO '!' y NO 'x'".

[ ] es un grupo de caracteres.

[^ ] niega la lista de caracteres.

+2

No del todo. '\ d' es la abreviatura de dígitos; funciona igual en una clase de personaje que en cualquier otro lugar. Si realmente quisieras que coincidiera con una barra invertida o una 'd', tendrías que escapar de la barra invertida:' [^ \\ d +! X] '. Pero eso no es lo que el autor pretendía. –

+0

Depende del dialecto. Antes de Perl, '[^ \ d]' ciertamente significaría cualquier carácter, excepto la barra invertida o d (o nueva línea). – tripleee

Cuestiones relacionadas