Rumah >pembangunan bahagian belakang >tutorial php >Mengapa PHP Regex Saya Menghasilkan 'preg_match(): Penyusunan gagal: julat tidak sah dalam kelas aksara' Selepas Menaik taraf kepada PHP 7.3?

Mengapa PHP Regex Saya Menghasilkan 'preg_match(): Penyusunan gagal: julat tidak sah dalam kelas aksara' Selepas Menaik taraf kepada PHP 7.3?

Susan Sarandon
Susan Sarandonasal
2024-12-06 01:37:13244semak imbas

Why Does My PHP Regex Produce

Julat Tidak Sah dalam Kelas Aksara: Memahami Isu Selepas Peningkatan PHP

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.

Peralihan ke PCRE2 dalam PHP 7.3

Dengan PHP 7.3 , enjin PHP PCRE beralih kepada PCRE2, menyebabkan beberapa tidak serasi ke belakang perubahan:

  • Pengubah suai "S" tidak berkesan, kerana corak dikaji secara automatik.
  • Pengubah suai "X" berkelakuan sebagai lalai dalam PCRE2, tanpa kesan yang ketara.
  • Unicode 10 dilaksanakan dalam PCRE2, berpotensi memperkenalkan perubahan tingkah laku dengan tidak sah corak.

Sempang dalam Kelas Aksara: Pra dan Selepas PHP 7.3

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:

  • Gunakannya pada permulaan atau akhir yang kelas.

Contoh:

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)){

Rujukan Tambahan:

"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!

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