javascript正则表达式验证问题
我正在为以下内容编写javascript正则表达式:javascript正则表达式验证问题,javascript,regex,Javascript,Regex,我正在为以下内容编写javascript正则表达式: 必须至少有一个数字 必须至少有一个大写字母 必须介于8-15个字符之间 我试过这样做: function isStrongPassword(strInput) { //works well except A1aaaaaa var regex = /^(?=.*\d)(^[A-Za-z0-9])(?=.*[A-Z]).{7,14}$/; return regex.test(strInput); } 这工作正常,但与有
function isStrongPassword(strInput) {
//works well except A1aaaaaa
var regex = /^(?=.*\d)(^[A-Za-z0-9])(?=.*[A-Z]).{7,14}$/;
return regex.test(strInput);
}
这工作正常,但与有效输入不匹配
非常感谢您的帮助。您的表达式因
(?=.*[A-Z])
而失败。第一个字符后面的字符都不是大写的
这句话似乎足够了:
^(?=[^\d]*\d)(?=[^A-Z]*[A-Z]).{8,15}$
请注意,将
*
切换到[^…]*
与您的问题无关,但可以避免回溯。或者,您可以使用惰性匹配:*?
由于(^[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
/
我还没有试过你的答案。但我的正则表达式与1AAAAAA、AAAAA A1、111Aaaa等匹配。。。我认为这不是原因,原因是它指定了一个字母或数字来开始正则表达式,然后是一个大写字母。所以它不符合你的测试,测试开始时只有一个大写字母,之后就没有了。哦,是的,现在我明白你的意思了。非常感谢你的解释。regex是我的弱点:)regex是一门黑暗的艺术,通常有问题,总是被低估,有时是不可或缺的。先生,你给的regex作品非常好。我不明白为什么在我的例子中我必须给出7,14,但是在你的正则表达式中,你用8,15检查了长度?因为在你的表达式中,
(^[A-Za-z0-9])
已经匹配并使用了一个字符,所以只有7到14个let可以匹配。在我的表达式中,只有lookahead不使用任何字符,因此
必须匹配8到15次。