0

私は次のJavaScript正規表現を書いています:

  1. 少なくとも 1 桁の数字が必要です
  2. 少なくとも 1 つの大文字が必要です
  3. 8 ~ 15 文字にする必要があります

私はこのように試しました:

function isStrongPassword(strInput) {
    //works well except A1aaaaaa
    var regex = /^(?=.*\d)(^[A-Za-z0-9])(?=.*[A-Z]).{7,14}$/; 
    return regex.test(strInput);
}

A1aaaaaaこれは、有効な入力である と一致しないという事実を除いて、適切に機能しています。

どんな助けでも大歓迎です。

4

2 に答える 2

1

が原因で式が失敗します(?=.*[A-Z])。最初の文字に続く文字はどれも大文字ではありません。

次の式で十分なようです。

^(?=[^\d]*\d)(?=[^A-Z]*[A-Z]).{8,15}$

.*への切り替え[^...]*は問題とは関係ありませんが、バックトラックを回避することに注意してください。または、遅延マッチングを使用することもできます: .*?

于 2013-02-22T09:48:47.923 に答える
1

その部分のために正規表現が壊れてい(^[A-Za-z0-9])ました。つまり、数字の後に文字または数字があり、次に大文字が必要です。これはうまくいくはずです

/^(?=.*\d)(?=.*[A-Z]).{8,15}$/; 

このように壊れるものは...

/              
^              # start match
(?=.*\d)       # is there a digit up ahead (maybe after zero or more anythings)
(?=.*[A-Z])    # is there a capital up ahead (maybe after zero or more anythings)
.{8,15}        # 8 to 15 anythings
$              # end match
/              
于 2013-02-22T09:51:45.177 に答える