Pourquoi ma correspondance de modèle de date ISO échoue ?
L'expression régulière fournie ne correspond pas correctement aux dates de style ISO en raison d'un transfert manquant des barres obliques ("/") au début et à la fin du motif. Ces délimiteurs sont essentiels dans la syntaxe regex de PHP. Le modèle corrigé doit être :
/^(?P<year>[0-9]{4})-(?P<month>[0-9]{2})-(?P<day>[0-9]{2}) (?P<hour>[1-2]{1}\d{1}):(?P<min>[0-5]{1}\d{1}):(?P<sec>[0-5]{1}\d{1})$/
Ce modèle définit six groupes de capture pour l'année, le mois, le jour, l'heure, la minute et la seconde.
Approche alternative : utilisation de DateTime Class
Bien que l'utilisation de regex puisse être une option, une solution plus élégante consiste à utiliser DateTime de PHP class:
function validateDate($date, $format = 'Y-m-d H:i:s') { $d = DateTime::createFromFormat($format, $date); return $d && $d->format($format) == $date; }
Cette fonction accepte une chaîne de date et un format facultatif. Il utilise la méthode createFromFormat pour créer un objet DateTime et vérifie si l'objet généré est valide et correspond à la date d'origine.
La fonction validateDate fournit un moyen plus robuste et polyvalent de valider les dates. Il prend en charge une large gamme de formats et peut valider des dates avec différents niveaux de granularité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!