Regex ne parvient pas à valider le format de date ISO
Question :
Pourquoi le expression régulière suivante, destinée à correspondre aux dates de style ISO, fonctionnant comme attendu ?
if(preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([1-2]{1})([0-9]{1}):([0-5]{1})([0-9]{1}):([0-5]{1})([0-9]{1})$/', $date) >= 1) // ...
Réponse :
Bien que l'expression régulière elle-même soit valide, le problème ici réside dans l'utilisation de barres obliques " /" comme délimiteurs. PHP nécessite des guillemets doubles " ou des guillemets simples " comme délimiteurs pour les expressions régulières, pas des barres obliques.
Pour corriger ce problème, remplacez les barres obliques par des guillemets doubles :
if(preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([1-2]{1})([0-9]{1}):([0-5]{1})([0-9]{1}):([0-5]{1})([0-9]{1})$/', $date) >= 1) // ...
Maintenant, le régulier l'expression correspondra correctement aux dates de style ISO.
Avantages de l'utilisation de DateTime Classe :
Bien que l'expression régulière corrigée valide les dates ISO, il vaut la peine de considérer la classe DateTime pour la validation et la manipulation de la date et de l'heure. La classe DateTime est plus complète et peut gérer un large éventail de dates et de manipulations. formats d'heure.
L'exemple suivant montre comment utiliser la classe DateTime pour valider une date de style ISO :
function validateDate($date, $format = 'Y-m-d H:i:s') { $d = DateTime::createFromFormat($format, $date); return $d && $d->format($format) == $date; }
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!