Rumah > pembangunan bahagian belakang > tutorial php > Mengapakah PHP preg_match() saya gagal selepas menaik taraf kepada PHP 7.3 dengan ralat 'julat tidak sah dalam kelas aksara'?

Mengapakah PHP preg_match() saya gagal selepas menaik taraf kepada PHP 7.3 dengan ralat 'julat tidak sah dalam kelas aksara'?

Barbara Streisand
Lepaskan: 2024-12-15 10:00:21
asal
605 orang telah melayarinya

Why is my PHP preg_match() failing after upgrading to PHP 7.3 with a

preg_match(): Penyusunan Gagal Kerana Julat Kelas Aksara Tidak Sah

Mesej ralat "preg_match(): Penyusunan gagal: julat tidak sah dalam kelas aksara pada offset 20" menunjukkan bahawa corak ungkapan biasa mengandungi julat kelas aksara yang tidak sah. Dalam kes ini, isu itu tiba-tiba muncul selepas peningkatan PHP pada pelayan dan kami akan meneroka sebabnya.

Sebab Ralat:

PHP 7.3 menaik taraf enjin PCRE (Perl Compatible Regular Expressions) kepada PCRE2, yang membawa beberapa perubahan, termasuk pengesahan corak yang lebih ketat. Khususnya, aksara sempang (-) kini dilayan secara berbeza dalam kelas aksara.

Coretan Kod:

Kod yang disediakan menggunakan ungkapan biasa untuk mengesahkan nama pengguna:

/^[a-z0-9]([0-9a-z_-\s])+$/i
Salin selepas log masuk

Dalam versi PHP sebelumnya, tanda sempang boleh digunakan di mana-mana dalam kelas aksara jika ia dilepaskan atau diletakkan di tempat ia tidak dapat ditafsirkan sebagai penunjuk julat.

Impak PHP 7.3:

Dengan PCRE2, escape () tidak lagi diabaikan dalam kelas aksara bersempang . Ini bermakna bahawa dalam PHP 7.3 dan lebih baru, kod di atas hendaklah dikemas kini kepada:

/^[a-z0-9]([0-9a-z_-]\s)$/i
Salin selepas log masuk

Penyelesaian:

Untuk menyelesaikan ralat kompilasi, pastikan aksara bersempang kelas mengikut peraturan ini:

  • Gunakan tanda sempang pada kedudukan mula atau akhir sahaja.
  • Elakkan tanda sempang dengan sengkang ke belakang () jika ia muncul dalam mana-mana kedudukan lain.

Maklumat Tambahan:

  • Dokumentasi PHP rasmi untuk sifat Unicode melarikan diri menerangkan bahawa versi PCRE sebelumnya menganggap tanda sempang sebagai aksara literal di mana-mana lokasi aksara kelas.
  • Dengan PCRE2, ralat khusus kini dilemparkan untuk julat kelas aksara yang tidak sah, menjadikan isu itu lebih jelas.
  • Untuk versi PHP sebelum 7.3, penyelesaiannya adalah untuk melepaskan tanda sempang, tetapi ini tidak lagi diperlukan dalam PHP 7.3 dan lebih baru.

Atas ialah kandungan terperinci Mengapakah PHP preg_match() saya gagal selepas menaik taraf kepada PHP 7.3 dengan ralat 'julat tidak sah dalam kelas aksara'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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