[REGEXP]TESTER LA VALIDITÉ D'UNE DATE

cs_Jos Messages postés 128 Date d'inscription mardi 26 juin 2001 Statut Membre Dernière intervention 8 février 2005 - 12 janv. 2002 à 20:35
cs_HMax Messages postés 1 Date d'inscription mardi 22 juillet 2003 Statut Membre Dernière intervention 22 juillet 2003 - 22 juil. 2003 à 11:29
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/8732-regexp-tester-la-validite-d-une-date

cs_HMax Messages postés 1 Date d'inscription mardi 22 juillet 2003 Statut Membre Dernière intervention 22 juillet 2003
22 juil. 2003 à 11:29
Personnelement, je pense que la meilleur facon de vérifier qu'une date est valide est tout d'abord de la convertir au format ISO.
YYYY-MM-DD HH:MM:SS

Une fois cette date au format ISO, on peut la vérifier avec une RegExp
Ex: ([0-9]{4})(-)([0-1]{1,}[0-9]{1,})(-)([0-3]{1,}[0-9]{1,})( )([0-2]{1,}[0-9]{1,})(:)([0-5]{1,}[0-9]{1,})(:)([0-5]{1,}[0-9]{1,})
et même lui appliquer un bon vieux IsDate.

Le problème avec les date au format US/FR comme 02/15/2003 ou 15/02/2003 c'est que dans les 2 cas, IsDate renverra vrai, même si on veut vérifier que la date n'est pas au format anglais par exemple... D'ou l'intéret du format ISO, qui ne change jamais. Ne fonctionner qu'avec ce format est à mon avis la seule solution pour éviter tout problème de date.
cyril722 Messages postés 26 Date d'inscription vendredi 1 février 2002 Statut Membre Dernière intervention 16 août 2002
13 mars 2002 à 22:32
oui mais elle n'est pas tres precise ta fonction.Sans pour autant te vexer il faut que l'annee soit divisible 4 ou 100 et 400
vbtom Messages postés 229 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 5 octobre 2003
27 janv. 2002 à 00:26
Tu es en train de me poousser a faire une source + rechercher... arf
vbtom Messages postés 229 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 5 octobre 2003
27 janv. 2002 à 00:24
C juste un source pr tester le format de la date pas de prendre en compte le jour exact qd est né le christ.....
shaiulud Messages postés 404 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 15 juillet 2014 22
21 janv. 2002 à 10:27
ici nous avons un gros proble quand à la validité de la date
ex: un 30 février de dérange pas du tout ni un 31 avril.....

aucun test n'est fais si ne n'est sur les caractères.
si tu veux voir un test qui prend en compte les années bisextiles et séculaires.
tu peux le trouver dans ma librairie javascript dispo ici
vbtom Messages postés 229 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 5 octobre 2003
12 janv. 2002 à 23:04
tiens g modifie mon expression et ca devrai marcher mieux!
vbtom Messages postés 229 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 5 octobre 2003
12 janv. 2002 à 23:01
Ouais je sé mais bon c histoire dutiliser les expressions reguliere!
Le but de ce site:
Donnée plein de truc au visiteur!
apres c a lui de trier

c exactement c ke je fais!

Moi jutiliserai jsm une expression réguliere pr une date! c clair!

A#
cs_Jos Messages postés 128 Date d'inscription mardi 26 juin 2001 Statut Membre Dernière intervention 8 février 2005
12 janv. 2002 à 20:35
Je ne veux pas m'acharner sur ton cas, mais j'ai passé un été à trippoter les dates, alors laisses moi t'apporter mes commentaires pour cette source! héhé ;-)

Ta technique n'est pas mauvaise pour tester le format 99/99/99 où 9 représente un chiffre quelconque, mais à mon avis, elle n'est pas très efficace pour traiter les dates, en soit. En effet, si je lui passe 78/95/34 elle me retournera True, mais ça n'aura rien d'une date. Je te conseille plutôt de te pencher vers la fonction IsDate, qui est tout de même très puissante.

Laisses-moi d'ailleurs te livrer l'exemple fournis dans Vbs Doc, par rapport à cette fonction!

Dim MyDate, YourDate, NoDate, MyCheck
MyDate "19 octobre 1962": YourDate #19/10/62#: NoDate = "Bonjour"
MyCheck = IsDate(MyDate) ' Renvoie True.
MyCheck = IsDate(YourDate) ' Renvoie True.
MyCheck = IsDate(NoDate) ' Renvoie False.

@+
Rejoignez-nous