2008-06-20-ean
Regex: verification de dates
Pour combler ce temps d'une façon ou d'une autre (et pour contredire une certaine personne sur IRC de la faisabilitée de la chose), je me suis amusé à créer une regex vérifiant une date.
Certes, la regex est vraiment illisible, mais elle marche plutôt bien.
Un exemple d'utilisation:
$date="28/02/08 13:53"; if($date =~ /^ (?: (?: (?:(?:[0-2][0-9]?)|(?:3[0-1])) / (?:(?:0?[13578])|(?:1[02])) )| (?:(?:(?:[0-2][0-9]?)|30)/(?:(?:0?[469])|11)) | (?: (?: (?:[0-1][0-9]?)|2[0-8])/(?:0?2) ) )/d{2}(?:d{2})?s+(?:[0-1]?[0-9]|2[0-4]):(?:[0-5]?[0-9])$/x) { print "Date oK "; }
ou sa version 1 ligne:
/^(?:(?:(?:(?:[0-2][0-9]?)|(?:3[0-1]))/(?:(?:0?[13578])|(?:1[02])))| (?:(?:(?:[0-2][0-9]?)|30)/(?:(?:0?[469])|11))|(?:(?:(?:[0-1][0-9]?)| 2[0-8])/(?:0?2)))/d{2}(?:d{2})?s+(?:[0-1]?[0-9]|2[0-4]):(?:[0-5]?[0-9])$/x
Note: les années bissextiles ne sont pas prises en compte malheureusement...
Pour ceux désirant une version simple, ne vérfiant que les formats numériques
/^(dd?)/(dd?)/((?:dd){1,2})/
Exemple d'utilisation PHP:
if( preg_match("/^(dd?)/(dd?)/((?:dd){1,2})/",$mdate)) { echo "la date est correcte"; }
Exemple d'utilisation Perl:
if($mdate=~ /^(dd?)/(dd?)/((?:dd){1,2})/) { print "la date est correcte"; }