Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Tidak Padanan Ungkapan Biasa Tarikh ISO PHP Saya?

Mengapa Tidak Padanan Ungkapan Biasa Tarikh ISO PHP Saya?

DDD
DDDasal
2024-12-13 05:39:08672semak imbas

Why Isn't My PHP ISO Date Regular Expression Matching?

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:

  1. Betul Pembatas: Gunakan petikan berganda (") untuk melampirkan ungkapan biasa teks:
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)
  1. Petikan Tunggal Dalam Ungkapan: Jika anda perlu menggunakan petikan tunggal dalam ungkapan biasa, lepaskan petikan itu dengan garis serong ke belakang ():
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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn