我正在为以下内容编写一个javascript正则表达式:
我试过这样的话:
function isStrongPassword(strInput) {
//works well except A1aaaaaa
var regex = /^(?=.*\d)(^[A-Za-z0-9])(?=.*[A-Z]).{7,14}$/;
return regex.test(strInput);
}
这是正常的,除了它与A1aaaaaa
不匹配的事实,这是一个有效的输入。
感谢任何帮助。
答案 0 :(得分:1)
由于(?=.*[A-Z])
,您的表达式失败。第一个字符后面的字符都不是大写字母。
看来这个表达式应该足够了:
^(?=[^\d]*\d)(?=[^A-Z]*[A-Z]).{8,15}$
请注意,将.*
切换为[^...]*
与您的问题无关,但它可以避免回溯。或者,您可以使用延迟匹配:.*?
。
答案 1 :(得分:1)
你的正则表达式因为(^[A-Za-z0-9])
部分而中断,这意味着在数字之后,必须有一个字母或数字, 然后 a大写字母。这应该工作
/^(?=.*\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
/