我很遗憾为什么不这样做。
这是我的正则表达式:
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[\\\+\=\.\[\]_£|`¬':;~{}<>()#?!@$%^&*-]).{8,20}$
这里有一些代码来简单地测试它:
var str1 = "AAbb123.";
var str2 = "ell";
var re = new RegExp("^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[\\\+\=\.\[\]_£|\`¬':\;\~{}<>()#?!\@$\%^&*-]).{8,20}$");
if(str1.match(re)){
alert("matched")
}
else {
alert("doesnt match")
}
正则表达式已在2个正则表达式网站(regexpal.com&amp; http://www.freeformatter.com/regex-tester.html)中得到验证。两者都说str1对这个表达式有效但是当我的代码中包含它时它将无效。
下面是我试图让代码正常工作的另一个地方。并且它保持打印:不满足要求。
var uname = document.getElementById("pword1").value;
var re = new RegExp ("^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[\\\+\=\.\[\]_£|\`¬':\;\~{}<>()#?!\@$\%^&*-]).{8,20}$");
if(uname.match(re)){
DIMR = "Requirements MET";
}else {
DIMR = "Requirements NOT MET";
}
答案 0 :(得分:2)
使用new RegExp
构造函数时,需要正确转义字符串。
由于您的模式中没有任何变量,请尝试
var str1 = "AAbb123.";
var str2 = "ell";
var re = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[\\\+\=\.\[\]_£|\`¬':\;\~{}<>()#?!\@$\%^&*-]).{8,20}$/;
if(str1.match(re)){
alert("matched")
}
else {
alert("doesnt match")
}
答案 1 :(得分:1)
转义字符类中只有少数字符就足够了。使用"
作为正则表达式分隔符时,需要再次使用正则表达式中的反斜杠。
var re = new RegExp("^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[\\\\+=.\\[\\]_£|`¬':;~{}<>()#?!@$%^&*-]).{8,20}$");
字符类中的+
,.
,*
等特殊字符必须与文字+
或.
或*
匹配,所以你不需要逃避它。要匹配文字\
,您需要将\
正好三次转义。