2 votes

Expression régulière pour la séquence d'années

J'essaie donc de faire correspondre quelque chose comme

2011,2012,2013

ou

2011,

ou

2011 

mais PAS :

2011,201 o 2011,201,2012

J'ai essayé avec ([0-9]{4},?([0-9]{4},?)*) mais si la première année est appariée, le reste n'est pas pris en compte.

4voto

Chriszuma Points 2770

Tu étais proche.

 ^[0-9]{4}(?:,[0-9]{4})*,?$

Cela correspondra à toute chaîne constituée d'une séquence répétitive de chiffres à 4 chiffres et de virgules.

En ^ y $ correspondent respectivement au début et à la fin de la chaîne. Ainsi, elle ne correspondra que si la chaîne est composée de uniquement ces éléments.

En (?:) est un groupe de non-capture. Il vous permet de créer des groupes répétitifs sans les stocker tous dans des variables.

EDITAR: J'ai oublié la virgule facultative à la fin. J'ai ajouté un ,? pour s'en occuper.

EDIT 2 : Sur les conseils de FailedDev, voici mon idée originale. Elle fonctionne aussi, mais je pense qu'elle est plus difficile à comprendre. Elle est plus intelligente, mais ce n'est pas toujours une bonne chose.

^(:?[0-9]{4}(?:,|$))+$

1voto

6502 Points 42700

Cela fera l'affaire...

 /^[0-9]{4}(,[0-9]{4})*,?$/

c'est-à-dire 4 chiffres suivis de zéro ou plus de (une virgule suivie de 4 chiffres) et éventuellement d'une dernière virgule (de mauvais goût) avant la fin.

Le premier ^ et enfin $ Les chars garantissent que rien d'autre ne peut être présent dans la chaîne.

1voto

FailedDev Points 15104
if (subject.match(/^\d{4}(?:,?|(?:,\d{4}))+$/)) {
    // Successful match
}

Cela devrait fonctionner.

Explication :

"^" +              // Assert position at the beginning of the string
"\\d" +             // Match a single digit 0..9
   "{4}" +            // Exactly 4 times
"(?:" +            // Match the regular expression below
   "|" +              // Match either the regular expression below (attempting the next alternative only if this one fails)
      "," +              // Match the character “,” literally
         "?" +              // Between zero and one times, as many times as possible, giving back as needed (greedy)
   "|" +              // Or match regular expression number 2 below (the entire group fails if this one fails to match)
      "(?:" +            // Match the regular expression below
         "," +              // Match the character “,” literally
         "\\d" +             // Match a single digit 0..9
            "{4}" +            // Exactly 4 times
      ")" +
")+" +             // Between one and unlimited times, as many times as possible, giving back as needed (greedy)
"$"                // Assert position at the end of the string (or before the line break at the end of the string, if any)

0voto

Marshall Points 2498
/^(?:\d{4},?)*$/

Vérifie la présence de quatre chiffres, chacun éventuellement suivi d'une virgule, 0 à plusieurs fois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X