2011-04-27 16 views
9

He buscado mucho y no encuentro la solución para este RegExp (tengo que decir que no tengo mucha experiencia en Reg. Expressions).Rango de número de RegExp (1 a 36)

Me gustaría probar un número entre 1 y 36, excluyendo 0 y 37 y superiores.

Lo que tengo hasta ahora y casi funciona (no acepta 17, 18, 19, 27, 28, 29) ...

^[1-9]{1}$|^[1-3]{1}[0-6]{1}$|^36$; 

Puede alguien ayudarme por favor?

+0

es un requisito :( – jackJoe

Respuesta

21

Usted sabe sobre \d, ¿verdad?

^([1-9]|[12]\d|3[0-6])$ 

Prueba esto en la consola:

function test() { 
    for(var i = 0; i < 100; i++) { 
     if (/^([1-9]|[12]\d|3[0-6])$/.test(i.toString()) != (i >= 1 && i <=36)) { 
      document.write(i + "fail"); 
     } 
       else 
       document.write(i + "pass"); 
     document.write("<br/>"); 
    } 
} 
+0

este es realmente hermoso, gracias! – jackJoe

+0

+1 para ti, @harpo. Me había olvidado de \ d :) –

+0

@jackJoe, gracias, estaba un poco apresurado, sin embargo ... ver corrección . – harpo

3

Prueba esto:

^[1-9]$|^[1-2][0-9]$|^3[0-6]$ 

(Todos los números de 1 dígito entre 1 y 9, todos 1x y 2x y 3x números, los números de 30 a 36).

+0

veo la lógica, es tan "simple" Necesito más pruebas, pero esto funciona preciosa, gracias – jackJoe

0

Prueba esto:

/^[1-9]$|^[1-2]\d$|^3[0-6]$/ 

DEMO

+0

gracias por la respuesta – jackJoe

1

Trate ^[1-9]$|^[1-2]\d$|^3[0-6]$

+0

gracias.! para la respuesta! – jackJoe

10

^[0-9]|[0-2][0-9]|3[0-6]$

He aquí un desglose de la misma:


[0-9] = cualquier dígito 0-9
| = O
[0-2][0-9] = '1' o '2', seguido de cualquier dígito desde 0-9
| = O
3[0-6] = '3', seguido de cualquier dígito de 0-6.

Como @mu es demasiado corto, usar una comparación entera sería mucho más fácil y más eficiente. He aquí un ejemplo de función:

function IsInRange(number) 
{ 
    return number > 0 && number < 37; 
} 
+0

thnaks para la explicación, realmente necesitaba que fuera una expresión regular, de lo contrario lo habría resuelto con simple javascript antiguo :) – jackJoe

0

No estoy seguro de por qué todas las respuestas a esta repetir el error de la adición de las fronteras (^ y $) antes y después de cada condición. Sin embargo, sólo tiene que hacer:

^[1-9]|[1-2][0-9]|3[0-6]$ 
Cuestiones relacionadas