28

文字間に任意の数の単一スペースがある任意の数の文字に一致する正規表現を作成しました。その正規表現で最小文字数と最大文字数も強制したいのですが、それを行う方法がわかりません(または可能かどうか)。

私の正規表現は次のとおりです。

[A-Za-z](\s?[A-Za-z])+

1 つのスペースを囲む 2 組の文字のみが一致していることに気付いたので、それを修正するために少し修正しました。ただし、元の質問はまだ同じです。

最小 3 文字、最大 30 文字を強制する方法はありますか?

4

4 に答える 4

43

はい

同様に、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プロパティをテストするだけです。それはより読みやすいです。

于 2013-03-08T07:04:02.130 に答える
7

これはあなたが探しているものです

^[a-zA-Z](\s?[a-zA-Z]){2,29}$

^文字列の先頭です

$文字列の終わりです

(\s?[a-zA-Z]){2,29}(\s?[a-zA-Z]) に 2 ~ 29 回一致します。

于 2013-03-08T07:13:16.077 に答える
4

実際、ベンジャミンの答えは、OPの質問に対する完全な解決策につながります。先読みを使用すると、文字の総数を制限し、一致を文字と (オプションの) 単一スペースの組み合わせに制限することができます。

問題全体を解決する正規表現は次のようになります

(?=^.{3,30}$)^([A-Za-z][\s]?)+$

これは に一致しますがAAA、スペースが 2 つ連続しているA Aため一致しません。AA Aこれをhttp://regexpal.com/でテストしたところ、うまくいきました。

于 2013-11-04T14:22:52.180 に答える