正規表現の文字数制限の改善方法
元の正規表現では文字の長さに制限がありませんでした:
<code>var test = /^(a-z|A-Z|0-9)*[^$%^&*;:,<>?()\""\']*$/</code>
文字の長さを 15 に制限するには、式を次のように変更してみます。
<code>var test = /^(a-z|A-Z|0-9)*[^$%^&*;:,<>?()\""\']*${1,15}/</code>
量指定子はアンカーに直接適用できないため、エラーがスローされます。 入力文字列の長さを制限する正しい方法は、先頭で先読みアサーションを使用することです:
<code>^(?=.{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,<>?()\"']*$</code>
この先読みアサーションは、入力文字列が指定された文字範囲と一致し、長さが 1 ~ 15 文字であることを保証し、文字長制限を効果的に強制します。
最後に限定的な量指定子 ({1,15} など) を使用する場合と比較して、先読みアプローチを使用すると、入力文字列全体の長さを制限できます。量指定子は先読みアサーションのサブパターンに適用され、文字列の先頭から必要な文字数と一致することが保証されます。
他にも注意すべき点がいくつかあります:
[a-zA-Z0-9]*
サブパターンは、任意の長さの文字または数字のシーケンスと一致します。これは、元の式で使用される (a-z|A-Z|0-9)*
サブパターンと同等です。 (?=.{1,15}$)
$
アンカーを使用して、指定された数の文字が文字列の末尾になければならないことをアサートします。 A
と Z
の代わりに ^
と $
アンカーを使用する必要があります。 さらに、入力文字列に改行が含まれる可能性がある場合は、移植可能な任意の文字の正規表現構造 [sS]
を使用できます。
<code>^(?=[\s\S]{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,<>?()\"']*$</code>これにより、改行も文字長制限に含まれるようになります。
以上が正規表現の文字数を制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。