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 升級後 `preg_match()` 會失敗並顯示「字元類別範圍無效」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!