L’expression régulière suivante permets de valider une date au format dd/mm/yyyy
, dd-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");
}
See the Pen Valider une date avec une expression régulière by Damien Flandrin (@dam62500) on CodePen.0
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"
/>
See the Pen Valider une adresse IP avec une expression régulière en HTML by Damien Flandrin (@dam62500) on CodePen.0