ホームページ >バックエンド開発 >PHPチュートリアル >PHP のアップグレード後に「preg_match()」が失敗するのはなぜですか?

PHP のアップグレード後に「preg_match()」が失敗するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-18 19:40:15885ブラウズ

Why Does My `preg_match()` Fail After a PHP Upgrade?

PHP のアップグレードによる文字クラス範囲での preg_match() のコンパイル失敗

エラー「preg_match(): コンパイルに失敗しました: 範囲が無効です」オフセットの文字クラス」は、PHP の preg_match 関数を使用して英数字のユーザー名を検証するときによく発生します。このエラーは、サーバーで PHP をアップグレードした後に発生することが報告されています。

この問題は、PHP 7.3 以降のバージョンで導入された最近の変更に起因します。 PHP は PCRE エンジンを PCRE2 に移行し、より厳密なパターン検証を実現しました。具体的には、文字クラスでのハイフン (-) の使用に関係します。

7.3 より前の PHP バージョンでは、ハイフンをエスケープするか、文字クラスの先頭または末尾にハイフンを配置することで、文字クラスでハイフンを使用できました。範囲。ただし、PHP 7.3 以降では、PCRE2 エンジンによってこの要件が強化されました。

このエラーは、文字クラス [a-z0-9]([0-9a-z_-s]) にハイフンが含まれているために発生します。 $ は範囲の先頭または末尾にありません。これにより、コンパイルが失敗します。

この問題を解決するには、文字クラスを次のように変更する必要があります。

/[a-z0-9]([0-9a-z-_ ]+)+/i

範囲の末尾にハイフンを置くと、次のようになります。範囲を示すのではなく、クラス内のリテラル文字として解釈されます。

他のパターン構文の変更が、 PHP 7.3 にアップデートしてください。これらの変更の詳細と、それがコードに与える影響については、PCRE2 移行に関する公式 PHP ドキュメントを参照してください。

以上がPHP のアップグレード後に「preg_match()」が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。