2010-05-27 31 views
9

Estoy tratando de crear una expresión regular que acepte: Una cadena vacía, un entero simple o múltiples enteros separados por una coma pero no pueden tener coma de inicio y final.Regex: enteros delimitados por comas

pude encontrar esto, pero no puedo undertsand cómo quitar el límite de dígitos

^\d{1,10}([,]\d{10})*$ 
+0

Tenga en cuenta que '[,]' es equivalente a '' y probablemente significaba para escribir '([,] \ d {1,10}) * 'en lugar de' ([,] \ d {10}) * '. –

Respuesta

30

Lo informados aún requiere al menos 1 número entero, por lo que no coincidirá con una cadena vacía:

Aquí es lo que necesita:

^(\d+(,\d+)*)?$ 

Explicación:

  1. poner toda la cosa en paréntesis y al final con un '?' por lo como para que coincida con la cadena vacía.
  2. siempre comienzan con un número entero, por lo '\d+'. Eso es 1 o más caracteres de dígitos ('0'-'9')
  3. a continuación, hacer un conjunto de paréntesis que contiene ',\d+' y poner un asterisco después de ella.
    3a. El interior significa comenzar con un ',' luego un número entero. 3b. El asterisco significa repetir todo dentro del paréntesis 0 o más veces.

Hench todo el asunto es either an empty string or start with an integer then repeat zero or more times a string which starts with a comma and ends with an integer

+0

Todo el trabajo pero tuve que elegir uno, y el primero en llegar me lo tomó, gracias :) –

+1

@Metzu, tenga en cuenta que el primero no coincide con una cadena vacía ... – tster

+0

Esto debe marcarse como la respuesta correcta – Spike

3

{1,10} y {10} son rangos. Puede reemplazarlos por + para infinito-positivo. Ej .:

^\d+([,]\d+)*$ 
+2

Me parece que también puedes omitir los corchetes alrededor de la coma. –

+0

Me parece que tienes razón. – troelskn

1

intente lo siguiente:

^(\d+(,\d+)*)?$ 
+0

Gracias por eso :) –

Cuestiones relacionadas