2009-03-25 9 views
11

Soy nuevo en StackOverflow, por lo que le ruego me indique si existe una forma mejor de hacer la siguiente pregunta.Comprobación numérica de RegEx

Necesito crear una expresión regular que detecte si un campo en la base de datos es numérico, y si es numérico cae dentro de un rango válido (es decir, 1-50). Intenté [1-50], que funciona excepto en los casos en que un número de un dígito va precedido de un 0 (es decir, 06). 06 debe considerarse un número válido, ya que luego puedo convertirlo en un número.

¡Realmente aprecio su ayuda! Estoy tratando de aprender más sobre expresiones regulares, y he estado aprendiendo todo lo que puedo de: www.regular-expressions.info. Si ustedes tienen recomendaciones de otros sitios para profundizar en estas cosas, ¡lo agradecería!

+0

duplicado:? Http://stackoverflow.com/questions/676467/how-to-match-numbers-between-x- and-y-with-regexp –

+1

No lo llamaría un duplicado; este es un caso especial del otro problema, y ​​mucho más simple. –

+0

Esta pregunta relacionada podría ser útil: [¿Cómo hacer coincidir los números entre X e Y con expresiones regulares?] (Http://stackoverflow.com/questions/676467/) – Tomalak

Respuesta

16

Prueba este

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

La idea de esta expresión regular es romper el problema en casos

  • 0? [1-9] se encarga del caso de un solo dígito que permite una opcional que precede 0
  • [1-4] [0-9] se ocupa de todos los números del 10 al 49. Esto también allwows para un precedente 0 en un solo dígito
  • 50 se encarga de 50
+0

@ybo, sí lo hará. Pero dijeron que querían 06, así que supuse que 00 también era válido. – JaredPar

+0

@Jared, eliminé mi comentario después de su edición, pero todavía entiendo que necesita valores entre 1 y 50. Creo que deben excluirse los 0 y 00. – ybo

+0

@ybo, estás en lo cierto. Actualicé la respuesta para excluir todas las formas de 0 – JaredPar

5

Las expresiones regulares funcionan en caracteres (en este caso, dígitos), no en números. Debe tener un patrón separado para cada número de dígitos en su patrón y combinarlos con | (el operador OR) como las otras respuestas han sugerido. Sin embargo, considere solo verificar si el texto es numérico con una expresión regular (como [0-9]+) y luego convertir a un número entero y verificar que el entero esté dentro del rango.

2

No se puede hacer fácilmente la comprobación de rango con expresiones regulares. Con algún trabajo puede desarrollar un patrón que reconozca un rango numérico, pero generalmente es bastante complejo y difícil de modificar para un rango ligeramente diferente.

Será mejor que rompa esto en dos partes.

  1. Reconocer el patrón de número (^\d+$).

  2. Compruebe el rango de ese número en un programa de aplicación.

0

^0 [1-50] {1,2} $