2011-07-11 8 views
5

No soy muy nuevo con expresiones regulares, pero no he sido capaz de encontrar una expresión adecuada para mi problema hasta el momento:JavaScript-Regular Expresiones

Quiero comprobar una cadena que un usuario introduce en un campo de texto. La cadena debe consistir en uno o más términos separados por punto y coma.

realidad, hay dos tipos de términos:

  1. El primero consiste en un número, seguido por un guión y luego seguido por un número de nuevo, por ejemplo, 1-4 o 22-44

  2. El segundo término consiste en un número y una coma que se repiten cero o más veces, p. 1,2 o 4,5,6

Todos los términos tienen que ser concluido con un punto y coma.

Una entrada válida sería: 1-4;5,6,7;9-11; o 1,3;4-6;8,9,10;

He intentado muchas variaciones, pero no pude encontrar una solución hasta el momento. Mi problema es que esta cadena de entrada puede consistir en cualquier cantidad de términos. Traté de resolver esto con el operador OR y "lookahead", respectivamente, pero sin éxito.

Cualquier ayuda sería muy apreciada.

Gracias mucho, enne

+4

Sus ejemplos no coinciden con su descripción. A la primera "entrada válida" le falta el punto y coma final, y "22-44" no es "un dígito seguido de un guión ...". –

+0

Eso es muy cierto Kerrek, agregó un punto y coma y cambió "dígito" a "número". Gracias por el comentario. – enne87

Respuesta

4

Esta expresión regular debería hacer lo que necesita:

/^(?:[0-9]+-[0-9]+;|[0-9]+(?:,[0-9]+)*;)+$/ 
+0

Esto no aceptaría '1-4; 5,6,7; 9-11', su ejemplo sin un terminal'; '. – Vache

+0

@Vache - señalando que el requisito del PO es ambiguo dado que ese ejemplo no concuerda con la afirmación en la línea anterior a que "Todos los términos deben concluirse con un punto y coma". – nnnnnn

+0

Buen punto. La descripción decía que ** "todos los términos deben concluirse con un punto y coma" **, así que asumí que esto incluía el término final. – EdoDodo

2

Editado: La primera pregunta que se veía eran los puntos y comas separadores, ahora se les muestra como terminadores.

Aquí es una secuencia de uno o más términos, terminado por punto y coma, en la que cada término es un número o un rango de números o una lista de números separados por comas:

/^(\d+(-\d+|(,\d+)*)?;)+$/ 

Con no grupos -capturing

/^(?:\d+(?:-\d+|(?:,\d+)*)?;)+$/ 
+0

Ray muy bueno, gracias :) Lamentablemente, solo puedo establecer una respuesta como aceptada:/ – enne87

1

mi tomar ..

^(?:\d+-\d+(?:;|$)|(?:\d+(?:[,;]|$))+)+$

+0

No está mal, solo falta el último punto y coma del último término. Gracias por tu ayuda. – enne87

Cuestiones relacionadas