2011-10-13 71 views
11

Necesito una expresión regular para que coincida con cualquier número del 0 al 99. Los ceros iniciales pueden no estar incluidos, esto significa que f.ex. 05 no está permitido.Expresión regular para los números sin ceros a la izquierda

Sé cómo hacer coincidir 1-99, pero no consigo el 0 incluido.

Mi expresión regular para 1-99 es

^[1-9][0-9]?$ 
+0

Este era un casi correcto, ¿pero acabas de tener tu argumento opcional '?' en el segundo dígito en lugar del dígito principal. –

Respuesta

9

Actualizado:

^([0-9]|[1-9][0-9])$ 

Partidos 0-99. No coincide con los valores con ceros a la izquierda. Dependiendo de su aplicación, es posible que necesite escapar de los paréntesis y el símbolo o.

+0

No quiere ceros a la izquierda, por ejemplo, '05' (que en realidad corresponde a esta expresión). – aioobe

+0

Entendí "no se puede incluir" ya que los ceros a la izquierda eran opcionales. –

+0

Eso no funciona para números de un solo dígito (por ejemplo, '9'). Además, también podría reducirlo un poco: '^ (0 | [1-9] \ d?) $'. – redbmk

1

[...] pero no conseguir el 0 incluido.

Sólo tiene que añadir 0|... delante de la expresión:

^(0|[1-9][0-9]?)$ 
    ^^ 
+2

Su expresión coincide con '05' también ... –

+0

[No, no] (http://ideone.com/riqg8). – aioobe

+2

Lo que probó no coincide con su expresión aquí. –

3
^(0|[1-9][0-9]?)$ 

aquí el test http://regexr.com?2uu31 (varias muestras incluidas)

Hay que añadir un 0|, pero tenga en cuenta que la "o" (|) en expresiones regulares tiene la prioridad más baja. ^0|[1-9][0-9]?$ en realidad significa (^0)|([1-9][0-9]?$) (ignoraremos que ahora hay dos grupos de captura). Entonces significa que "la cadena comienza con 0" O "la cadena termina con [1-9][0-9]?". Una alternativa al uso de corchetes es repetir el ^$, como ^0$|^[1-9][0-9]?$.

+0

Probé todo, pero no esto ... :(¿Por qué necesito los corchetes externos? No entiendo. – AGuyCalledGerald

+0

@ Jan-FrederikCarl Porque '|' no tiene prioridad, así que sin los corchetes, '^ 0 | [ 1-9] [0-9]? $ == (?:^0) | (?: [1-9] [0-9]? $) '(Donde' (?:) 'Es el que no captura grupo). Pero lo que quiere es algo equivalente a '(?:^0 $) | (?:^[1-9] [0-9]? $)' – xanatos

0

Esto debería hacer el truco:

^(?:0|[1-9][0-9]?)$ 
1

Una respuesta más simple sin utilizar el operador o hace que el primer dígito opcional:

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

Partidos 0-99 se desestime ceros a la izquierda (01-09) .

12

Hay un montón de maneras de hacerlo, pero aquí es una alternativa para permitir que cualquier longitud del número sin ceros a la izquierda

0-99:

^(0|[1-9][0-9]{0,1})$ 

0-999 (sólo aumentará {0, }):

^(0|[1-9][0-9]{0,2})$ 

1-99:

^([1-9][0-9]{0,1})$ 

1-100:

^([1-9][0-9]{0,1}|100)$ 

cualquier número en el mundo

^(0|[1-9][0-9]*)$ 

12 a 999

^(1[2-9]|[2-9][0-9]{1}|[1-9][0-9]{2})$ 
+0

Si quiero agregar un rango entre 12 y 999, entonces ¿Cuál sería la expresión regular? –

+0

'^ (1 [2-9] | [2-9] [0-9] {1} | [1-9] [0-9] {2}) $' funciona – Guish

0

Prueba esto le ayudará a

^([0-9]|[1-9][0-9])$ 
Cuestiones relacionadas