エラー メッセージ「preg_match(): コンパイルに失敗しました: 文字クラスの範囲が無効です」は問題を示しています提供されたコードで使用されている正規表現を使用します。この問題は、PHP のアップグレード後、特に PCRE2 ライブラリの変更により以前のバージョンから PHP 7.3 以降に移行する場合に発生する可能性があります。
PHP 7.3 の場合、PHP PCRE エンジンが PCRE2 に移行したため、いくつかの下位互換性がなくなりました。変更点:
PHP 7.3 より前では、ハイフンは、エスケープするか、使用できない場所に配置すれば、文字クラス内の任意の位置で使用できました。範囲を示すものではありません。ただし、PHP 7.3 以降では、PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL はデフォルトで false に設定されています。
したがって、文字クラスにハイフンを含めるには:
提供されたコードで、問題のある行は次のとおりです:
if(!preg_match("/^[a-z0-9]([0-9a-z_-\s])+$/i", $subuser)){
問題は文字内のハイフン (-) です。クラス [0-9a-z_-s]。これを修正するには、末尾または先頭にハイフンを置きます:
if(!preg_match("/^[a-z0-9]([0-9a-z\_-\s0-9a-z\_-\s])+$/i", $subuser)){
「PHP 7.3: PCRE2 has Remove PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL」でさらに詳しい情報が得られます:
PCRE2 はパターン検証がより厳密であるため、アップグレード後は、既存のパターンはコンパイルできなくなりました。
そのため、PHP 7.3 以降のバージョンの PCRE2 との互換性を確保するには、既存のパターンを綿密に調査し、変更する必要がある場合があります。
以上がPHP 7.3 にアップグレードした後、PHP 正規表現で「preg_match(): コンパイルに失敗しました: 文字クラスの範囲が無効です」というエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。