Mengapa Corak Padanan Tarikh ISO Saya?
Ungkapan biasa yang diberikan:
/^([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})$/
direka bentuk untuk memadankan tarikh gaya ISO dalam format "YYYY-MM-DD HH:MM:SS." Walau bagaimanapun, ia kembali palsu walaupun memenuhi kriteria. Isunya terletak pada garis miring (/) yang melampirkan ungkapan.
Pembatas Ungkapan Biasa PHP
Dalam PHP, ungkapan biasa mesti disertakan dalam pembatas, biasanya garis miring (/ ), tetapi petikan berganda (") juga boleh digunakan. Pembatas / digunakan untuk menentukan permulaan dan akhir ungkapan biasa dan untuk mengelakkan konflik dengan watak istimewa lain dalam ungkapan.
Menyelesaikan Isu
Untuk menyelesaikan isu, pastikan perkara berikut:
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)
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)
Pilihan Alternatif Menggunakan DateTime Kelas
Daripada menggunakan ungkapan biasa, pertimbangkan untuk menggunakan kelas PHP DateTime, yang menyediakan keupayaan pengesahan dan manipulasi tarikh yang lebih mantap dan boleh dipercayai:
function validateDate($date, $format = 'Y-m-d H:i:s') { $d = DateTime::createFromFormat($format, $date); return $d && $d->format($format) == $date; }
Fungsi ini kembali benar untuk tarikh yang sah dan palsu untuk yang tidak sah. Ia boleh digunakan untuk mengesahkan tarikh dalam pelbagai format, termasuk ISO.
Atas ialah kandungan terperinci Mengapa Tidak Padanan Ungkapan Biasa Tarikh ISO PHP Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!