文字間に任意の数の単一スペースがある任意の数の文字に一致する正規表現を作成しました。その正規表現で最小文字数と最大文字数も強制したいのですが、それを行う方法がわかりません(または可能かどうか)。
私の正規表現は次のとおりです。
[A-Za-z](\s?[A-Za-z])+
1 つのスペースを囲む 2 組の文字のみが一致していることに気付いたので、それを修正するために少し修正しました。ただし、元の質問はまだ同じです。
最小 3 文字、最大 30 文字を強制する方法はありますか?
はい
同様に、3 から 30 の間で一致させるために+
使用できる 1 つ以上を意味します{3,30}
たとえば[a-z]{3,30}
、3 ~ 30 個の小文字のアルファベットの一致
Pattern クラスのドキュメントから
X{n,m} X, at least n but not more than m times
あなたの場合、3〜30文字の後にスペースが続くマッチングは、次の方法で実現できます。
([a-zA-Z]\s){3,30}
末尾の空白が必要な場合は、次を使用できます: (2-29 回の文字 + スペース、次に文字)
([a-zA-Z]\s){2,29}[a-zA-Z]
空白を文字としてカウントする場合は、その数値を 2 で割って取得する必要があります
([a-zA-Z]\s){1,14}[a-zA-Z]
\s?
末尾の空白がオプションの場合は、最後の空白に追加できます。これらはすべてRegexPlanetでテストされました
文字列全体を 3 ~ 30 文字にしたい場合は、先読みを使用(?=^.{3,30}$)
して RegExp の先頭に追加し、他のサイズ制限を削除できます。
そうは言っても、正直なところ、私はおそらくString
's.length
プロパティをテストするだけです。それはより読みやすいです。
これはあなたが探しているものです
^[a-zA-Z](\s?[a-zA-Z]){2,29}$
^
文字列の先頭です
$
文字列の終わりです
(\s?[a-zA-Z]){2,29}
(\s?[a-zA-Z]) に 2 ~ 29 回一致します。
実際、ベンジャミンの答えは、OPの質問に対する完全な解決策につながります。先読みを使用すると、文字の総数を制限し、一致を文字と (オプションの) 単一スペースの組み合わせに制限することができます。
問題全体を解決する正規表現は次のようになります
(?=^.{3,30}$)^([A-Za-z][\s]?)+$
これは に一致しますがAAA
、スペースが 2 つ連続しているA A
ため一致しません。AA A
これをhttp://regexpal.com/でテストしたところ、うまくいきました。