2011-12-21 11 views
30

Soy algo nuevo en las expresiones regulares y estoy escribiendo la validación para un campo de cantidad donde las expresiones regulares necesitan para ser usadas.RegEx: ¿Cómo puedo hacer coincidir todos los números mayores que 49?

¿Cómo puedo hacer coincidir todos los números mayores o iguales a 50?

me trataron

 
[5-9][0-9]+ 

pero que sólo coincide con 50-99. ¿Hay una manera simple de unir todos los números posibles mayores que 49? (Sólo se utilizan números enteros)

+1

¿Hay algún motivo por el que no utilice una expresión regular para extraer la parte numérica, a partir de allí conviértala y pruébela como un número? Parece que sería mucho más simple. –

+0

Necesita usar expresiones regulares para cumplir con nuestro sistema. Es demasiado largo y complejo de una historia para este bloque de comentarios. Huelga decir que si hubiera otra manera, lo usaría. @ridgerunner solo se usan enteros. – Maxx

Respuesta

59

El hecho de que el primer dígito tiene que estar en el rango 5-9 sólo se aplica en el caso de dos dígitos. Por lo tanto, comprobar que en el caso de 2 dígitos, y permitir el más dígitos directamente:

^([5-9]\d|\d{3,})$ 

Esta expresión regular tiene principio/final anclajes para asegurarse de que está comprobando todos los dígitos, y la cadena representa en realidad una serie . El | significa "o", entonces [5-9]\d o cualquier número con 3 o más dígitos. \d es simplemente un atajo para [0-9].

Editar: Para no permitir números como 001:

^([5-9]\d|[1-9]\d{2,})$ 

Fuerza al primer dígito no ser un cero en el caso de 3 o más dígitos.

+0

¡Guau, esto es perfecto! Muchas gracias. – Maxx

+1

Gracias por la explicación también. Siento que realmente aprendí algo. +1 – Maxx

+0

@pimvdb: El uso de '^' y '$' implicaría que toda la cadena es numérica. Esto plantea la pregunta, ¿por qué se necesita una expresión regular? –

1

probar este regex:

[5-9]\d+|\d{3,} 
+0

Esto está cerca, pero los números como '444' no coinciden. – Maxx

+0

¡La versión actualizada parece funcionar! – Maxx

4

Pruebe un grupo condicional a juego 50-99 o cualquier cadena de tres o más dígitos:

var r = /^(?:[5-9]\d|\d{3,})$/ 
17

Sé que ya hay una buena respuesta publicado, pero no va a permitir que los ceros iniciales. Y no tengo la reputación suficiente para dejar un comentario, así que ... Aquí está mi solución que permita ceros a la izquierda:

Primero coinciden con los números 50 y 99 (con posibles ceros a la izquierda):

0*[5-9]\d 

y ahora con los números de 100 y más (también con ceros iniciales):

0*[1-9]\d{2,} 

sumarlos con una "o" y envolverlo para que coincida con la frase completa:

^0*([1-9]\d{2,}|[5-9]\d)$ 

Eso es todo!

1

Next matches todo mayor o igual a 11100:

^([1-9][1-9][1-9]\d{2}\d*|[1-9][2-9]\d{3}\d*|[2-9]\d{4}\d*|\d{6}\d*)$ 

For greater or equal50:

^([5-9]\d{1}\d*|\d{3}\d*)$ 

Ver patrón y modificar a cualquier número. También sería genial encontrar algunos operadores recursivos adelante/atrás para números grandes.

Cuestiones relacionadas