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";
}
Tfe