Extension de la regex donnée par @AlokChaudhary pour le support :
1. dd mmm YYYY
(en plus de dd-mmm-YYYY
, dd/mmm/YYYY
, dd.mmm.YYYY
).
2. mmm en lettres majuscules (en plus du format du titre)
dd mmm YYYY
par exemple 30 Apr 2026
o 24 DEC 2028
sont populaires.
Regex étendu :
(^(?:(?:(?:31(?:(?:([-.\/])(?:0?[13578]|1[02])\1)|(?:([-.\/ ])(?:Jan|JAN|Mar|MAR|May|MAY|Jul|JUL|Aug|AUG|Oct|OCT|Dec|DEC)\2)))|(?:(?:29|30)(?:(?:([-.\/])(?:0?[13-9]|1[0-2])\3)|(?:([-.\/ ])(?:Jan|JAN|Mar|MAR|Apr|APR|May|MAY|Jun|JUN|Jul|JUL|Aug|AUG|Sep|SEP|Oct|OCT|Nov|NOV|Dec|DEC)\4))))(?:(?:1[6-9]|[2-9]\d)?\d{2}))$|^(?:29(?:(?:([-.\/])(?:0?2)\5)|(?:([-.\/ ])(?:Feb|FEB)\6))(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))$|^(?:(?:0?[1-9]|1\d|2[0-8])(?:(?:([-.\/])(?:(?:0?[1-9]|(?:1[0-2])))\7)|(?:([-.\/ ])(?:Jan|JAN|Feb|FEB|Mar|MAR|May|MAY|Jul|JUL|Aug|AUG|Oct|OCT|Dec|DEC)\8))(?:(?:1[6-9]|[2-9]\d)?\d{2}))$)
Les cas de test inclus dans le Démonstration de Regex
Caractéristiques (retenues) :
- La vérification de l'année bissextile (validation du 29 février) comprend les logiques suivantes : (divisible par 4 mais non divisible par 100) ou (divisible par 400).
- Supports années 1600 ~ 9999
- Supports
dd/mm/YYYY
, dd-mm-YYYY
, dd.mm.YYYY
(mais pas dd mm YYYY
)
- Supports
dd mmm YYYY
, dd-mmm-YYYY
, dd/mmm/YYYY
, dd.mmm.YYYY
( dd mmm YYYY
nouvellement ajouté. mmm peut être en majuscules, par exemple DEC, ou en format titre, par exemple Dec)
Quelques retouches mineures supplémentaires comme suit :
-
Inclut le correctif apporté par Ofir Luzon le 14 février 2019 pour supprimer une virgule qui se trouvait dans la regex qui autorisait des dates comme 29-0,-11 [erreur répliquée dans la regex d'Alok Chaudhary].
-
Remplacé (\/|-|\.)
par ([-.\/])
pour minimiser l'utilisation de la barre oblique inversée. \/
est toujours utilisé afin de supporter certaines saveurs de regex, par exemple PCRE(PHP), bien que d'autres saveurs de regex, par exemple Python, puissent simplement utiliser /
à l'intérieur de la classe de caractères [ ]
-
Ajout d'une paire de parenthèses () entourant l'ensemble de la regex pour en faire un groupe de capture pour l'ensemble de la chaîne correspondante. Ceci est utile pour les personnes qui utilisent des fonctions de type findAll pour obtenir une liste d'éléments correspondants (par ex. re.findall
en Python). Cela nous permet de capturer toutes les chaînes de caractères correspondantes dans une chaîne de caractères multiniveau avec les codes suivants :
re.findall
codes d'échantillons :
match_list = re.findall(regex, source_string)
for item in match_list:
print(item[0])
Image regex étendue :
Les crédits devraient aller à Ofir Luzon et Alok Chaudhary qui ont créé des regex si excellents pour nous tous !