Rumah >pembangunan bahagian belakang >tutorial php >Mengapakah regex PHP saya gagal mengesahkan format tarikh ISO?

Mengapakah regex PHP saya gagal mengesahkan format tarikh ISO?

Patricia Arquette
Patricia Arquetteasal
2024-12-15 11:50:11412semak imbas

Why is my PHP regex failing to validate an ISO date format?

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!

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