0

我正在为以下内容编写 javascript 正则表达式:

  1. 必须至少有一位数字
  2. 必须至少有一个大写字母
  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 回答