Bonjour je souhaiterai savoir quelle est la regex a utiliser pour verifier le format d'une date comme celle la :
jour-mois-an heure:minute:second
JJ:MM:AA HH:MM:SS
31-12-06 23:52:05
Voila merci beacoup !
Bonjour je souhaiterai savoir quelle est la regex a utiliser pour verifier le format d'une date comme celle la :
jour-mois-an heure:minute:second
JJ:MM:AA HH:MM:SS
31-12-06 23:52:05
Voila merci beacoup !
Salut,
Avec une simple fonction utilisant checkdate()
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 function verif_date($date) { if( substr_count($date, ' ') == 1 ) { $date = explode(' ', $date); if( substr_count($date[0], '-') == 2 && substr_count($date[1], ':') == 2 ) { list($h, $m, $s) = explode(':', $date[1]); $date = explode('-', $date[0]); if( checkdate($date[1], $date[0], $date[2]) === true ) if( is_numeric($h) && is_numeric($m) && is_numeric($s) && $h >= 0 && $h <= 23 && $m >= 0 && $m <= 59 && $s >=0 && $s <= 59 ) return true; } } return false; } var_dump(verif_date('31-12-06 23:52:05')); var_dump(verif_date('31-12-06 00:52:05')); var_dump(verif_date('31-12-06 24:52:05')); var_dump(verif_date('31-12-06 23:aa:05')); var_dump(verif_date('32-12-06 23:52:05')); var_dump(verif_date('31-02-06 23:52:05')); var_dump(verif_date('31-12-06 23:52:70')); var_dump(verif_date('31-*******06 23:52:05')); var_dump(verif_date('31-12-06 2352:05')); var_dump(verif_date('xxxxxxxxxx'));
J'ai horreur de explode parce que si vous fournissez une chaîne invalide où il viendra à manquer des parties, plusieurs messages d'erreur vous seront affichés (sinon il faut ajouter des vérifications supplémentaires). Personnellement, je préfère donc le faire avec preg_match d'autant plus que l'on peut assouplir un peu le format :
Probablement à améliorer ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 function verif_date($date) { if (preg_match('#^([0-9]{2})([/-])([0-9]{2})\2([0-9]{2}|[0-9]{4})\s+([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})$#D', $date, $m)) { if (strlen($m[4]) == 2) { $m[4] += 2000; } return checkdate($m[3], $m[1], $m[4]) && $m[5] < 24 && $m[6] < 60 && $m[7] < 60; } return FALSE; }
Le substr_count de la fonction que j'ai mise le vérifiait.
Mais bon, c'est vrai qu'une expression régulière est sans doute mieux.
Partager