Mesej ralat "preg_match(): Penyusunan gagal: julat tidak sah dalam kelas aksara" menunjukkan masalah dengan ungkapan biasa yang digunakan dalam kod yang disediakan. Isu ini boleh timbul selepas peningkatan PHP, khususnya apabila berhijrah daripada versi terdahulu kepada PHP 7.3 atau lebih baharu disebabkan oleh perubahan dalam pustaka PCRE2.
Dengan PHP 7.3 , enjin PHP PCRE beralih kepada PCRE2, menyebabkan beberapa tidak serasi ke belakang perubahan:
Sebelum PHP 7.3, sempang boleh digunakan dalam kelas aksara dalam sebarang kedudukan jika dilepaskan atau diletakkan di tempat yang boleh digunakan 't menunjukkan julat. Walau bagaimanapun, dalam PHP 7.3 dan lebih baru, PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL ditetapkan kepada palsu secara lalai.
Oleh itu, untuk memasukkan tanda sempang dalam kelas aksara:
Dalam kod yang disediakan, baris bermasalah ialah:
if(!preg_match("/^[a-z0-9]([0-9a-z_-\s])+$/i", $subuser)){
Isunya ialah dengan tanda sempang (-) dalam aksara kelas [0-9a-z_-s]. Untuk membetulkannya, letakkan tanda sempang di penghujung atau permulaan:
if(!preg_match("/^[a-z0-9]([0-9a-z\_-\s0-9a-z\_-\s])+$/i", $subuser)){
"PHP 7.3: PCRE2 telah mengalih keluar PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL" memberikan pandangan lanjut:
Oleh itu, penelitian yang teliti dan pengubahsuaian corak sedia ada mungkin diperlukan untuk memastikan keserasian dengan PCRE2 dalam PHP 7.3 dan versi yang lebih baru.Atas ialah kandungan terperinci Mengapa PHP Regex Saya Menghasilkan 'preg_match(): Penyusunan gagal: julat tidak sah dalam kelas aksara' Selepas Menaik taraf kepada PHP 7.3?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!