Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RegExp.test不工作_Javascript_Regex - Fatal编程技术网

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版本将其连接到字符串中。