ホームページ >ウェブフロントエンド >jsチュートリアル >先読みを使用して正規表現の入力長を制限するにはどうすればよいですか?
正規表現での入力長の制限
正規表現は、テキスト内のパターンを照合する強力な方法を提供しますが、多くの場合、長さを制限する必要があります。一致した文字数。これは簡単そうに見えますが、量指定子を正しく適用するのは難しい場合があります。この記事では、パターンの最後にある数量指定子の制限が機能しない理由を調査し、先読みを使用した代替アプローチを提供します。
次の正規表現を考えてみましょう:
/(a-z|A-Z|0-9)*[^$%^&*;:,<>?()""']*$/
この式は、一連の文字、数字、その他の文字と一致しますが、入力文字列の全長は制限されません。文字数を 15 文字に制限するには、次のようにします。
/(a-z|A-Z|0-9)*[^$%^&*;:,<>?()""']*${1,15}/
ただし、これはエラーになります。その理由は、量指定子がパターン全体ではなく、そのすぐ左のサブパターンに適用されるためです。この場合、量指定子 {1,15} は 2 番目の文字クラスに適用され、その長さが 1 ~ 15 文字に制限されますが、文字列全体の長さは制限されません。
代わりに、入力長を制限する正しい方法これは、文字列の先頭にアンカーされた先読みを使用することです:
^(?=.{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,<>?()""']*$
この先読みにより、入力文字列全体が目的の長さと一致することが保証されます。
注: 先読みは、文字を消費しないゼロ幅アサーションです。これらは、後続のパターンに基づいて true または false のみを返します。
入力に改行が含まれる場合は、移植可能な [sS] 文字クラスを使用して、改行を含む任意の文字と一致させることができます:
^(?=[\s\S]{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,<>?()""']*$
先読みを使用すると、目的のパターン マッチング動作を維持しながら、入力文字列の長さを効果的に制限できます。
以上が先読みを使用して正規表現の入力長を制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。