Javascript RegExp.test不工作
我正在尝试为强密码编写正则表达式Javascript RegExp.test不工作,javascript,regex,Javascript,Regex,我正在尝试为强密码编写正则表达式 /* Regular expression explained o Must contain at least one number: (?=.*\d) o Must contain at least one letter: (?=.*[a-zA-Z]) o Must contain at least one symbol: (?=.*[!@#$*_=|?{}\[\]~\-,.]) o No whitespace:
/* Regular expression explained
o Must contain at least one number: (?=.*\d)
o Must contain at least one letter: (?=.*[a-zA-Z])
o Must contain at least one symbol: (?=.*[!@#$*_=|?{}\[\]~\-,.])
o No whitespace: (?=\S+$)
o Length 8 - 25 characters long: .{8,25}
*/
pass = document.getElementById('password').value;
var PwdRegExpStr = "^(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$*_=|?{}\[\]~\-,.])(?=\S+$).{8,25}$"
var PwdRegExp = new RegExp(PwdRegExpStr);
var PwdRegExpStr2 = "^.*(?=.{8,25})(?=.*[a-zA-Z])(?=.*\d)(?=.*[!#$?]).*$"
var PwdRegExp2 = new RegExp(PwdRegExpStr2);
var patt = /^(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$*_=|?{}\[\]~\-,.])(?=\S+$).{8,25}$/
var patt2 = /^.*(?=.{8,25})(?=.*[a-zA-Z])(?=.*\d)(?=.*[!#$%&? "]).*$/
alert("Pass:"+pass+" = "+PwdRegExp.test(pass)+" = "+PwdRegExp2.test(pass)+" = "+patt.test(pass)+" = "+patt2.test(pass));
当我输入“qwer1234$”时,我看到以下结果:
通过:qwer1234$=false=false=true=true
你能帮我理解为什么他们不都是真的吗
谢谢你的主要问题是逃跑不好。当您以字符串文字的形式指定正则表达式时,必须转义反斜杠。因此:
"^(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$*_=|?{}\[\]~\-,.])(?=\S+$).{8,25}$"
……应该是:
"^(?=.*\\d)(?=.*[a-zA-Z])(?=.*[!@#$*_=|?{}\\[\\]~\\-,.])(?=\\S+$).{8,25}$"
另一方面,我认为没有必要编写
(?=\S+$)。{8,25}$
当\S{8,25}$
就可以了。而在另一个版本中,*
后面的额外^
没有意义。它仍然可以工作,但是你让正则表达式引擎做了比它应该做的更多的工作。也许它试图建议不要使用正则表达式验证密码?这很奇怪,我有点困惑。无论哪种方式,如果可以的话,都可以在JavaScript中按字面意思创建表达式(/^abc$/.test('abc')
)。这就是返回true
的密码。谢谢Sam,我实际上是在向javascript传递配置中的最小密码长度。这就是为什么我希望在定义正则表达式之前使用RegExp版本将其连接到字符串中。