繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM