Expression régulière pour valider une date

L’expression régulière suivante permets de valider une date au format dd/mm/yyyydd-mm-yyyy or dd.mm.yyyy que j’utilise pour vérifier les dates. Elle permets de vérifier des dates impossibles comme un « 30 Février » ou encore un « 31 Avril »

(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})

Version JavaScript

La méthode prend en paramètre une date et lance ensuite une vérification avec l’expression régulière. S’il ne trouve aucune correspondance, il échoue la vérification et la fonction renvoie false, si elle renvoie vrai, la date aura un format correct ( ex : dd/mm/yyyy ) et la fonction sera vrai. La méthode Javascript pour valider une date : 

/**
 * Valider une date avec une expression régulière
 * 
 * Si la date n'est pas valide, retourne false
 * 
 * @param date
 * @return Boolean
 */
function validateDate(date){
    var Reg = new RegExp(/^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})/i);
    return Reg.test(date);
}

Comment utiliser la fonction Javascript

La meilleure façon de l’utiliser sera dans une déclaration IF comme ci-dessous.

if(validateDate(date)){
     alert("Date  valide");
} else {
     alert("Date invalide");
}

Version PHP

Lorsque vous validez les dates du côté client, vous devez également valider également sur le serveur au cas où l’utilisateur désactiverai le JavaScript côté client via son navigateur. Voici un snippet PHP pour valider les dates côté serveur.

/*
 * valider la date
 * @param $date
 */
function isValidDate($date)
{
    return preg_match('/^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})/i', $date);
}

Version HTML

En HTMl, vous pouvez créer des champs avec l’attribut pattern pour vérifier si une date  est valide ou non, vous pouvez y renseigner une expression régulière de valider une date. Attention, c’est utile uniquement pour afficher l’information visuellement à l’utilisateur par exemple avec des bordures rouges.

<input
      name="postcode"
      type="text"
      pattern="(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})"
      placeholder="dd/mm/yyyy"
     />

Newsletter

Ne manquez jamais les nouveaux conseils, tutoriels et autres.

Pas de spam, jamais. Nous ne partagerons jamais votre adresse électronique et vous pouvez vous désabonner à tout moment.