2012-08-03 13 views
11

Mis habilidades de registro son casi cero y estoy tratando de hacer coincidir un campo para tener exactamente 7 o 9 números (no entre 7 o 9, por lo que 8 números no son válidos).Expresiones regulares que coinciden exactamente con 7 o 9 dígitos

He tratado (no se rían)

/^([0-9]{7} | [0-9]{9}) 

y

/^([0-9]{7 | 9}) 

si alguien podría ayudar y explicar la respuesta que sería muy apreciada.

Asumo (tal vez erróneamente) que es no importa qué idioma (programación) estoy usando

Gracias

+0

posible duplicado de [? ¿Hay un cuantificador de expresiones regulares que dice "X o Y se repite"] (http://stackoverflow.com/questions/11397378/is -there-a-regex-cuantifier-that-says-either-x-or-y-repeats) – fuxia

Respuesta

18
/^\d{7}(?:\d{2})?$/ 

\d es moderna abreviada de expresiones regulares para [0-9], utilizando (?: impide a group capture no desea o necesita suceda.

2

siete o nueve dígitos es siete dígitos opcionalmente seguido de dos dígitos más:

[0-9]{7}([0-9]{2})? 
+1

Tienes que anclar la expresión. –

+1

Depende de dónde lo usan. No para 'Pattern.matches()' de Java, por ejemplo. – Joey

2

uso esta expresión regular ^\d{7}(\d{2})?$

0

Su primera opción funcionará si elimina los espacios (y opcionalmente los paréntesis).

1

Su primer enfoque funciona. Simplemente omita los espacios en blanco, agregue un $ para que coincida con el final de cadena y el delimitador de barra final. También puede sustituir [0-9] con el acceso directo \d:

/^(\d{7}|\d{9})$/ 
Cuestiones relacionadas