正規表現で文字長を施行
正規表現には、長さの制限が必要なことがよくあります。 それらがなければ、正規表現は任意の長さの文字列に一致します。 数量詞は解決策のように見えますが(例:{1,15}
)、文字列全体で直接動作しません。 これは、量子が直前の要素にのみ影響するためです。
たとえば、
var test = /^(a-z|A-Z|0-9)*[^$%^&*;:,?()""']*${1,15}/ // Error!
lookaheadソリューション
正しいアプローチは、肯定的なLookaheadの主張を利用しています:
^(?=.{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,?()""']*$
lookahead を理解しています
が鍵です。 この肯定的なLookaheadは、文字列全体(最初から(?=.{1,15}$)
から^
まで)には1〜15文字($
)が含まれていると主張しています。 それは.{1,15}
を消費しません。条件をチェックするだけです。 残りのregex [a-zA-Z0-9]*[^$%^&*;:,?()""']*$
は、その長さの制約内の許可された文字と一致します。
newlinesの処理
文字列に新しいライン文字が含まれる場合は、より堅牢な文字クラスを使用して、NewLinesを含むキャラクターに一致します。
^(?=[\s\S]{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,?()""']*$
以上が正規表現で文字長制限を強制するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。