首頁 > 後端開發 > php教程 > 為什麼 PHP 升級後 `preg_match()` 會失敗並顯示「字元類別範圍無效」?

為什麼 PHP 升級後 `preg_match()` 會失敗並顯示「字元類別範圍無效」?

DDD
發布: 2024-12-09 01:11:10
原創
624 人瀏覽過

Why Does `preg_match()` Fail with

preg_match(): PHP 升級後字元類別範圍無效

錯誤「preg_match(): 編譯失敗:字元範圍無效class at offset 」通常發生在常規字元集的字元類別中錯誤使用連字符(-) 時。

在提供的程式碼片段中:

else if(!preg_match("/^[a-z0-9]([0-9a-z_-\s])+$/i", $subuser)){
登入後複製

字元類別 [0-9a-z_-s] 中有一個連字元「-」。在舊版的 PHP 中,使用反斜線轉義連字符,或將其放在字符類別的開頭或結尾,允許使用它。

PHP 7.3 和 PCRE2 更改

但是,隨著 PHP 7.3 和遷移到 PCRE2 庫,連字符的使用受到更多限制。在 PCRE2 中,連字符只能用在字元類別的開頭或結尾。

要解決此問題,請修改字元類,如下所示:

else if(!preg_match("/^[a-z0-9]([0-9a-z_0-9_-])+$/i", $subuser)){
登入後複製

這會將連字符放在字元類的開頭,使其能夠正確使用。

附加註意

  • 按照提供的答案中的建議,在 PHP 7.3 及更高版本中不再需要使用 轉義連字符。
  • PCRE2 函式庫可能會在常規中引入其他更改表達式語法。升級到 PHP 7.3 或更高版本時,查看文件並對程式碼進行必要的調整非常重要。

以上是為什麼 PHP 升級後 `preg_match()` 會失敗並顯示「字元類別範圍無效」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板