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
Lepaskan: 2024-12-06 01:37:13
asal
246 orang telah melayarinya

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)){
Salin selepas log masuk

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)){
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan