[英]why is my regular expression not validating a valid expression?
我不知道为什么不这样做。
这是我的正则表达式:
^(?=.*?[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和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";
}
使用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")
}
仅转义字符类中存在的几个字符就足够了。 当使用"
作为正则表达式分隔符时,您需要再转义一次正则表达式中的反斜杠。
var re = new RegExp("^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[\\\\+=.\\[\\]_£|`¬':;~{}<>()#?!@$%^&*-]).{8,20}$");
特殊字符,如+
, .
,字符类中的*
必须匹配文字+
或.
或*
,因此您无需对其进行转义。 要匹配文字\\
,您需要将该\\
正好转义三遍。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.