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

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