tfe - tfeserver homepage

Catégorie Perl - posté le 20/06/08 13:06:49

Pour combler ce temps d'une façon ou d'une autre (et pour contredire une certaine personne sur IRC de la faisabilité 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\n";
}

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
/^(\d\d?)\/(\d\d?)\/((?:\d\d){1,2})/


Exemple d'utilisation PHP:
if( preg_match("/^(\d\d?)\/(\d\d?)\/((?:\d\d){1,2})/",$mdate))
{
      echo "la date est correcte"; 
}
Exemple d'utilisation Perl:
if($mdate=~ /^(\d\d?)\/(\d\d?)\/((?:\d\d){1,2})/)
{
      print "la date est correcte";
}

4 commentaire(s) perl irc regex verification date