ホームページ > バックエンド開発 > PHPチュートリアル > PHP のアップグレード後に「preg_match(): コンパイルに失敗しました: 文字クラスの範囲が無効です」というメッセージが表示されるのはなぜですか?

PHP のアップグレード後に「preg_match(): コンパイルに失敗しました: 文字クラスの範囲が無効です」というメッセージが表示されるのはなぜですか?

Barbara Streisand
リリース: 2024-12-09 21:48:15
オリジナル
863 人が閲覧しました

Why Am I Getting

PHP アップグレード後の文字クラスの範囲が無効です

このエラー、「preg_match(): コンパイルに失敗しました: オフセットの文字クラスの範囲が無効です」 20」は通常、PHP のアップグレードによって、使用されている PCRE エンジンまたは Unicode エンジンに変更が導入された場合に発生します。 code.

PHP PCRE2 の移行

PHP 7.3 以降のバージョンでは PCRE2 が利用されており、下位互換性のない変更がいくつか導入されています。そのような変更の 1 つは、文字クラス パターンの検証の厳格化です。

文字クラス内のハイフン

以前は、ハイフン (-) をエスケープして、文字クラス内のどこでも使用できました。キャラクタークラス。ただし、PHP 7.3 以降では、ハイフンを文字クラスの先頭または末尾にのみ配置する必要があります。

解決策

このエラーを解決するには、次のことを確認してください。ハイフン (-) は文字クラス内に正しく配置されます。クラス内でハイフンを文字として使用する必要がある場合は、エスケープする必要があります (例: -)。

// Invalid (in PHP 7.3+)
preg_match("/^[a-z0-9]([0-9a-z_\-\s])+$/i", $subuser);

// Valid (in PHP 7.3+)
preg_match("/^[a-z0-9]([0-9a-z\-_\s])+$/i", $subuser);
ログイン後にコピー

追加考慮事項

  • PCRE2 はより厳密な Unicode を特徴としていますこれは、一部の無効なパターンの動作に影響を与える可能性があります。
  • コンパイル エラーを避けるために、コードで文字クラスに正しいハイフンの配置が使用されていることを確認してください。
  • 詳細については、PHP ドキュメントを参照してください。これらの変更と互換性の問題。

以上がPHP のアップグレード後に「preg_match(): コンパイルに失敗しました: 文字クラスの範囲が無効です」というメッセージが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート