2011-01-21 73 views
30

Necesito una expresión regular que requiera al menos UN dígito y un máximo de SEIS.Expresión regular de 6 dígitos

He resuelto esto, pero ninguno de ellos parece funcionar.

^[0-9][0-9]\?[0-9]\?[0-9]\?[0-9]\?[0-9]\?$ 

^[0-999999]$ 

¿Alguna otra sugerencia?

Respuesta

81

Puede utilizar gama cuantificador {min,max} para especificar mínimo de 1 dígito y un máximo de 6 dígitos como:

^[0-9]{1,6}$ 

Explicación:

^  : Start anchor 
[0-9] : Character class to match one of the 10 digits 
{1,6} : Range quantifier. Minimum 1 repetition and maximum 6. 
$  : End anchor 

¿Por qué su expresión regular no funciona?

Usted eran casi cerca de la expresión regular:

^[0-9][0-9]\?[0-9]\?[0-9]\?[0-9]\?[0-9]\?$ 

Desde que había escapado a la ? precediendo con el \, la ? no era más que actúa como un meta-caracteres de expresiones regulares (por 0 o 1 repeticiones) pero estaba siendo tratado literalmente.

Para solucionarlo simplemente elimine el \ y usted está allí.

See it on rubular.

La expresión regular basada en el cuantificador es más corta, más legible y se puede extender fácilmente a cualquier cantidad de dígitos.

Su segunda expresión regular:

^[0-999999]$ 

es equivalente a:

^[0-9]$ 

que coincide exactamente con las cadenas de un dígito. Son equivalentes porque una clase de caracteres [aaaab] es igual que [ab].

+5

+1 para la explicación extendida –

+1

Al igual que sugiere el título, se podría agregar una nota para que coincida con un número de 6 dígitos, uno debe usar '[0-9] {6}' y agregar anclas si es necesario. –

3

^[0-9]{1,6}$ debería hacerlo. No conozco VB.NET lo suficiente como para saber si es lo mismo allí.

Por ejemplo, eche un vistazo a Wikipedia.

+0

Se ha perdido el anclaje final. – codaddict

15
^\d{1,6}$ 

....................

+1

corto y dulce. Utilicé una variación de este \ d {7,7} con la característica TextFX Buscar/Reemplazar de Notepad ++ para obtener los 7 dígitos en un archivo. muchas gracias por llevarme a la solución que necesitaba. –

+4

Dado que '\ d' y' [0-9] 'no son siempre los mismos [(ver esta publicación)] (http://stackoverflow.com/q/890686/1447415), el'^[0-9] {1,6} $ 'solución podría ser preferible. – Johan

+0

Simple y efectivo. – ksooklall

6

Usted podría intentar

^[0-9]{1,6}$ 

debería funcionar.

Cuestiones relacionadas