为什么我的正则表达式没有验证有效的表达式?

时间:2014-12-01 15:14:20

标签: javascript regex validation

我很遗憾为什么不这样做。

这是我的正则表达式:

^(?=.*?[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";


    }

2 个答案:

答案 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}$");

字符类中的+.*等特殊字符必须与文字+.*匹配,所以你不需要逃避它。要匹配文字\,您需要将\正好三次转义。