0

Rubyでパスワードを検証する必要がありますが、パスワードには少なくとも1つの文字(/[a-z]{1,}/)と1つの数字(/\d{1,}/)が含まれている必要があります。ただし、これらは文字列内で任意の順序で発生する可能性があります。単一の正規表現でこれを行うことはできますか?

'aa' => should not match
'99' => should not match
'a9' => should match
'9a' => should match

これらは機能しません

'9a' =~ /[a-b]{1,}\d{1,}/  <= no match
'a' =~ /[a-b]{1,}|\d{1,}/  <= match

残念ながら&、(OR)演算子に対応する(AND)演算子のようなものが見つかりませ|ん。これを行う方法はありますか?

4

3 に答える 3

2

あなたはこのようにそれを行うことができます:

/(?=.*[a-z])(?=.*\d)/
于 2012-09-19T16:32:01.693 に答える
1

あなたは書ける:

'9a' =~ /[a-z].*\d|\d.*[a-z]/

しかし、私はおそらく弾丸をかみ、それを2つの正規表現として記述します。

'9a' =~ /[a-z]/ && '9a' =~ /\d/

追加するために編集:あるいは、私のコメントからOmar Jackmanの回答まで、次のように書くことができます。

'9a' =~ /^(?=.*?[a-z]).*?\d/

ゼロ幅の正の先読みアサーション (?=...)を使用します。

于 2012-09-19T16:30:19.927 に答える
0

これはすべての場合に機能します。

([a-zA-Z]+\d+|\d+[a-zA-Z]+)

小文字のみを指定しなかったため、大文字も追加しました。

于 2012-09-19T16:31:26.630 に答える