preg_match() Kegagalan Penyusunan dalam Julat Kelas Aksara Akibat Peningkatan PHP
Ralat "preg_match(): Penyusunan gagal: julat tidak sah dalam kelas aksara di offset" sering berlaku apabila menggunakan fungsi preg_match PHP untuk mengesahkan nama pengguna alfanumerik. Ralat ini telah dilaporkan nyata selepas peningkatan PHP pada pelayan.
Isu ini berpunca daripada perubahan terbaru yang diperkenalkan dalam PHP 7.3 dan versi yang lebih baharu. PHP telah memindahkan enjin PCREnya kepada PCRE2, yang menghasilkan pengesahan corak yang lebih ketat. Khususnya, ia melibatkan penggunaan sempang (-) dalam kelas aksara.
Dalam versi PHP sebelum 7.3, adalah mungkin untuk menggunakan sempang dalam kelas aksara dengan melepaskannya atau meletakkannya pada permulaan atau akhir julat. Walau bagaimanapun, dalam PHP 7.3 dan kemudian, enjin PCRE2 telah mengetatkan keperluan ini.
Ralat berlaku kerana tanda sempang dalam kelas aksara [a-z0-9]([0-9a-z_-s]) $ bukan pada permulaan atau akhir julat. Ini menyebabkan kompilasi gagal.
Untuk menyelesaikan isu, anda harus mengubah suai kelas aksara seperti berikut:
/[a-z0-9]([0-9a-z-_ ]+)+/i
Dengan meletakkan tanda sempang di hujung julat, ia akan menjadi ditafsirkan sebagai aksara literal dalam kelas, dan bukannya menunjukkan julat.
Adalah penting untuk ambil perhatian bahawa perubahan sintaks corak lain mungkin telah diperkenalkan dengan kemas kini kepada PHP 7.3. Untuk mendapatkan maklumat lanjut tentang perubahan ini dan cara ia boleh mempengaruhi kod anda, sila rujuk dokumentasi PHP rasmi tentang penghijrahan PCRE2.
Atas ialah kandungan terperinci Mengapa `preg_match()` Saya Gagal Selepas Peningkatan PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!