1

任意の順序で 3 桁を受け入れる正規表現を試してみましたが、うまくいくことを願っています。これが私のコード例です:

^(?:\D*\d){3}\D*$

次のような文字列を受け入れます: abc123、a2v1c3、123agc

私の問題は、少なくとも3文字と3桁を受け入れるコードを組み合わせるときです。正規表現の多くの組み合わせを試しましたが、正しい正規表現を実現できませんでした。少なくとも 3 文字と 3 桁の数字を任意の順序で受け入れる正しい正規表現の書き方を知っている人はいますか? 前もって感謝します。

4

3 に答える 3

4

組み合わせ先読みを使用して、消費せずに各クラスの少なくとも 3 つが満たされるようにすることができます。次に、有効なすべての文字を制限付きで消費します。

/(?=.*[a-z].*[a-z].*[a-z].*)(?=.*\d.*\d.*\d.*)[a-z0-9]{6,}/

それは醜いですが、私が思いついた唯一の代替案よりもはるかにきれいです。

/\d{3}[a-z]{3}|\d{2}[a-z]{3}\d|\d{1}[a-z]{3},\d{2} ...
于 2013-03-01T06:05:22.533 に答える
0

そのようなものについては、いくつかのカウント機能が必要になると思います。これは、私が正しく覚えていれば、正規表現エンジン(通常の演算子を除く)では提供されません。{min, max}

あなたができることは、2つの正規表現、1つは文字用、もう1つは数字用(ほとんどのプログラミング言語はisDigitisLetter機能を提供するので、それらも使用できる)と、ある種のカウンターを持つことです。正規表現の代わりにこれを行うと、よりクリーンで保守しやすく理解しやすいコードが得られます。

于 2013-03-01T05:50:27.357 に答える
0

これは、2 つの肯定的な先読みで行うことができます。

/(?=(?:.*\d){3})(?=(?:.*[a-z]){3})^[a-z\d]*$/

Regex101 ライブの例


壊す:

少なくとも 3 桁を探します。

(?=(?:.*\d){3})

少なくとも 3 文字を探します。

(?=(?:.*[a-z]){3})

開始と終了の間で何が許可されるかを定義します。

^[a-z\d]*$/
于 2017-05-08T18:16:49.220 に答える