ホームページ >ウェブフロントエンド >jsチュートリアル >先読みを使用して正規表現の入力長を制限するにはどうすればよいですか?

先読みを使用して正規表現の入力長を制限するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-22 16:00:27233ブラウズ

How to Restrict Input Length in Regular Expressions Using Lookaheads?

正規表現での入力長の制限

正規表現は、テキスト内のパターンを照合する強力な方法を提供しますが、多くの場合、長さを制限する必要があります。一致した文字数。これは簡単そうに見えますが、量指定子を正しく適用するのは難しい場合があります。この記事では、パターンの最後にある数量指定子の制限が機能しない理由を調査し、先読みを使用した代替アプローチを提供します。

次の正規表現を考えてみましょう:

/(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]*[^$%^&*;:,<>?()""']*$
  • ^ アンカーは、文字列の先頭と一致します。 string.
  • 正の先読み (?=.{1,15}$) は、文字列 ($) の終わりの前に 1 ~ 15 文字があるかどうかをチェックします。
  • 残りの文字クラス文字、数字、およびその他の許可された文字と一致します。

この先読みにより、入力文字列全体が目的の長さと一致することが保証されます。

注: 先読みは、文字を消費しないゼロ幅アサーションです。これらは、後続のパターンに基づいて true または false のみを返します。

入力に改行が含まれる場合は、移植可能な [sS] 文字クラスを使用して、改行を含む任意の文字と一致させることができます:

^(?=[\s\S]{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,<>?()""']*$

先読みを使用すると、目的のパターン マッチング動作を維持しながら、入力文字列の長さを効果的に制限できます。

以上が先読みを使用して正規表現の入力長を制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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