2009-03-27 214 views
22

Tengo una lista de entradas de texto que un usuario puede ingresar en la base de datos y necesito validar estas entradas con expresiones regulares porque algunas de ellas son complejas. Uno de los campos debe tener lagunas en los números (es decir, 10, 12, 14, 16 ...). Mi pregunta es, ¿existe una construcción Regex que me permita unir solo ejecuciones de dígitos pares o impares? Sé que puedo sacar este valor y hacer una verificación de división, pero esperaba una solución Regex pura para esto, si es posible.Expresión regular para que coincida solo con el número par o impar

[Editar]

La solución Terminé usando en esta fue una adaptación del de JaredPar porque además de necesitar sólo de pares o iguala También necesitaba para restringir por una serie (es decir, todos los números pares entre 10-40). A continuación está terminado Regex.

^[123] [02468] $

+0

El {1} ​​'s en su expresiones regulares son probablemente totalmente innecesario, aunque su motor regex puede ser diferente de la mía. –

+0

Esa expresión regular coincidirá con números hasta 48. Si desea limitarla a 40, necesita esto:^[123] [02468] | 40 $ –

+1

Y Chris tiene razón: {1} en una expresión regular es puro ruido, no importa qué sabor regex está usando. –

Respuesta

45

números impares

"^\d*[13579]$" 

números pares

"^\d*[02468]$" 

Run de probabilidades con una, y el potencial de separación de espacio en blanco

"$\s*(\d*[13579]\s*,\s*)*\d*[13579]$" 

ejecución de Evens con una, y el potencial separador de espacios en blanco

"$\s*(\d*[02468]\s*,\s*)*\d*[02468]$" 
+0

Eres realmente ** inteligente ** –

1

¿Se refiere a algo como:

/(\d*[02468](, *\d*[02468]))|(\d*[13579](, *\d*[13579]))/ 

o uno de los otros tres posibles interpretaciones de su pregunta en su redacción?

+0

Creo que también necesitas protagonizar el segundo subgrupo en cada grupo, ¿no? –

5

El Regex no es demasiado difícil de diseñar, si se tiene en cuenta que un número par o impar se puede probar solo mirando el último dígito, que también debe ser par o impar. Así, el texto de número impar se ejecuta podría ser:

"^(\s*\d*[13579]\s*,)*(\s*\d*[13579]\s*)$" 

sustituya [13579] por [02468] de números pares ...

Cuestiones relacionadas