2011-06-07 26 views
8

Tengo que escribir una expresión regular para la toma de entrada de la misma familiaexpresión regular para aceptar números separados por comas, pero rango de números es 0-32767

23,456,22,1,32767 

es decir

  1. No se admiten en el inicio comas o fin
  2. Los espacios pueden aparecer antes y/o al principio de la coma, p. Ej. 23, 45,56, 67 etc.
  3. Los rangos de cada número deben ser 0-32767.

Actualmente estoy usando expresiones regulares como esta [0-9]+(,[0-9]+)*.

Esto permite números separados por comas solamente (no permite espacios en absoluto), y no verifica el rango del número.

+2

No desea comprobar el rango de números con la expresión regular, será el relevo ilegible – stema

+0

http://www.codinghorror.com/blog/2008/06/expresiones-regulares-ya-tiene-dos-dos -problems.html – Johnsyweb

Respuesta

15

Probablemente sea conveniente hacerlo en dos pasos. En primer lugar compruebe que el rango es 0-99999:

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

A continuación, analizar la cadena a una lista de números enteros utilizando un lenguaje de programación de propósito general y comprobar que x <= 32767 para cada entero x.

+1

+1, pero es posible que desee agregar '\ s *' alrededor de la coma para permitir espacios como Basmah preguntó. –

+0

"\ s *" o "*"? La pregunta parece muy poco clara sobre este punto. –

+1

dice espacios, así que iría por espacios ... – Benjol

9

Usted puede validar un rango de números con una expresión regular, pero ya que usted tiene que mirar en la representación textual de los números, la expresión regular será difícil de leer:

0*(?:3276[0-7]|327[0-5][0-9]|32[0-6][0-9]{2}|3[01][0-9]{3}|[12][0-9]{4}|[1-9][0-9]{1,3}|[0-9]) 

coincide con un número entero entre 0 y 32767, con ceros iniciales opcionales.

Así toda su expresión regular sería

^0*(?:3276[0-7]|327[0-5][0-9]|32[0-6][0-9]{2}|3[01][0-9]{3}|[12][0-9]{4}|[1-9][0-9]{1,3}|[0-9])(?: *, *0*(?:3276[0-7]|327[0-5][0-9]|32[0-6][0-9]{2}|3[01][0-9]{3}|[12][0-9]{4}|[1-9][0-9]{1,3}|[0-9]))*$ 

Ahora imagina que se hereda de expresiones regulares de un compañero de trabajo que ha dejado atrás sus años de la compañía ... Diviértete :)

Por lo tanto, llevar a Marcos de Consejo.

Esta respuesta tiene solo fines educativos y no constituyen una recomendación para usar una expresión regular en este caso.

+0

Bien Tim, gracias :) – Basmah

Cuestiones relacionadas