Expression régulière pour contrôler une date
Mehdi
-
[Dal] Messages postés 6373 Statut Contributeur -
[Dal] Messages postés 6373 Statut Contributeur -
Bonjour,
Je recherche désespérément une expression régulière qui me permettrait de valider 4 formats de date:
DD/MM/YYYY
DD/MM/YYYY hh:mm:ss
MM/DD/YYYY
MM/DD/YYYY hh:mm:ss
J'aurais besoin d'une seule expression régulière, pas de 4.
Merci pour toute aide.
Je recherche désespérément une expression régulière qui me permettrait de valider 4 formats de date:
DD/MM/YYYY
DD/MM/YYYY hh:mm:ss
MM/DD/YYYY
MM/DD/YYYY hh:mm:ss
J'aurais besoin d'une seule expression régulière, pas de 4.
Merci pour toute aide.
A voir également:
- Regex date jj/mm/aaaa
- Trouver une date de naissance gratuit - Forum Webmastering
- Jm date avis - Forum Consommation & Internet
- Jm date désabonnement ✓ - Forum Consommation & Internet
- Abonnement jm date - Forum Consommation & Internet
- Prélèvement JM Jacquie et Michel date. - Forum Consommation & Internet
1 réponse
Salut Mehdi,
Cela :
Mais l'expression ne vérifie pas si les jours, mois, années (ou heure, d'ailleurs), correspondent à des nombres cohérents.
Par exemple, les entrées suivantes matchent :
Donc les cas 1 et 3 et 2 et 4 sont traités indifféremment.
Dal
Cela :
(\d{2}\/\d{2}\/\d{4}){1}(\s\d{2}:\d{2}:\d{2})?
Mais l'expression ne vérifie pas si les jours, mois, années (ou heure, d'ailleurs), correspondent à des nombres cohérents.
Par exemple, les entrées suivantes matchent :
99/99/9999 99/99/9999 99:99:99
Donc les cas 1 et 3 et 2 et 4 sont traités indifféremment.
Dal
En plus autoriser à la fois DD/MM et MM/DD est ambigu !
Exemple : "06/07/2012" peut être à la fois le 6 juillet et le 7 juin 2012...
Oui, bien sûr, tu as raison.
Ce que je veux dire, comme il a spécifié une validation de "DD/MM/YYYY " et "MM/DD/YYYY ", c'est que la regexp ne fait pas de distinction dans l'exemple donné.
S'il veut vérifier que les jours, mois, années (ou heure, d'ailleurs), correspondent à des nombres cohérents il doit faire autrement (ou complexifier énormément la regexp, comme tu le dis).
A mon sens, s'il faut faire cette vérification, le plus simple serait de tenter de traduire la chaîne validée en une date, avec une fonction ad hoc de son langage de programmation qui fasse déjà cela, et de vérifier que la traduction s'est bien passée. On ne sait pas quel langage de programmation il utilise, mais, au hasard, si c'est Php, ou pourrait capturer les jours, mois, année, heures, minutes et secondes avec la regexp et les passer à mktime() et vérifier la valeur de retour. Des fonctions similaires existent dans d'autres langages.
Et sa validation tient en 2 lignes de code grâce à la regexp qui fera le travail de capture (il faut rajouter les parenthèses de capture à celle proposée ci-dessus) avec un seul if testant la valeur de retour de la fonction.
En plus autoriser à la fois DD/MM et MM/DD est ambigu !
Oui, il faudra bien qu'il choisisse s'il veut pousser la vérification.
Dal