Rumah >pembangunan bahagian belakang >tutorial php >Mengapakah regex PHP saya gagal mengesahkan format tarikh ISO?
Regex Gagal Mengesahkan Format Tarikh ISO
Soalan:
Mengapa tidak mengikut ungkapan biasa, bertujuan untuk memadankan tarikh gaya ISO, berfungsi sebagai dijangkakan?
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) // ...
Jawapan:
Walaupun ungkapan biasa itu sendiri sah, isu di sini terletak pada penggunaan garis miring ke hadapan " /" sebagai pembatas. PHP memerlukan petikan berganda " atau petikan tunggal ' sebagai pembatas untuk ungkapan biasa, bukan garis miring ke hadapan.
Untuk membetulkan isu ini, gantikan garis miring ke hadapan dengan petikan berganda:
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) // ...
Sekarang yang biasa ungkapan akan sepadan dengan tarikh gaya ISO dengan betul.
Kelebihan Menggunakan DateTime Kelas:
Walaupun ungkapan biasa yang diperbetulkan akan mengesahkan tarikh ISO, kelas DateTime patut dipertimbangkan untuk pengesahan dan manipulasi tarikh dan masa Kelas DateTime adalah lebih komprehensif dan boleh mengendalikan pelbagai tarikh dan format masa.
Contoh berikut menunjukkan cara menggunakan kelas DateTime untuk mengesahkan tarikh gaya ISO:
function validateDate($date, $format = 'Y-m-d H:i:s') { $d = DateTime::createFromFormat($format, $date); return $d && $d->format($format) == $date; }
Atas ialah kandungan terperinci Mengapakah regex PHP saya gagal mengesahkan format tarikh ISO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!