preg_match(): Compilation Failed Due to Invalid Character Class Range
エラー メッセージ「preg_match(): コンパイルに失敗しました: 範囲が無効です」オフセット 20 の文字クラス」は、正規表現パターンに無効な文字クラス範囲が含まれていることを示します。この場合、サーバー上の PHP アップグレード後に問題が突然発生したため、その理由を調べます。
エラーの理由:
PHP 7.3 PCRE (Perl 互換正規表現) エンジンを PCRE2 にアップグレードしました。これにより、パターンの厳密な検証など、いくつかの変更が加えられました。特に、ハイフン (-) 文字は文字クラスで異なる方法で扱われるようになりました。
コード スニペット:
提供されたコードは正規表現を使用してユーザー名を検証します:
/^[a-z0-9]([0-9a-z_-\s])+$/i
以前のバージョンの PHP では、ハイフンは文字クラス内のどこでも使用できました。エスケープされたか、範囲のインジケーターとして解釈できない場所に配置されました。
PHP 7.3 の影響:
PCRE2 では、エスケープ () は no ですハイフン付き文字クラスでは無視されるようになりました。これは、PHP 7.3 以降では、上記のコードを次のように更新する必要があることを意味します:
/^[a-z0-9]([0-9a-z_-]\s)$/i
解決策:
コンパイル エラーを解決するには、ハイフンで囲まれた文字がクラスは次のルールに従います:
追加情報:
以上がPHP 7.3 にアップグレードした後、PHP preg_match() が「文字クラスの範囲が無効です」エラーで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。