RegExp特殊字符转义

时间:2018-08-23 04:29:56

标签: javascript regex

我已经用正则表达式弄乱了特殊字符几个小时了,必须承认我放弃了。

尝试创建密码测试功能,该功能测试以下至少一项:小写,大写,整数和特殊字符。

特殊字符为“¤@ +-£$!%*#?&()。:;,_”。

我已使用此功能对它们进行转义:

//used to escape special characters [¤@+-£$!%*#?&().:;,_]
RegExp.escape = function(str) {
  return String(str).replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
};

并在以下两个测试中测试了正则表达式:

var pattern1=/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[¤@\+-£\$\!%\*#\?&\(\)\.\:;,_]).{8,}$/g;
var regexVal1=pattern1.test(password);  

var pattern2=new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[¤@\+-£\$\!%\*#\?&\(\)\.\:;,_]).{8,}$","g");
var regexVal2=pattern2.test(password);

结果是:

var password="AaBbCcDd";//both regexVal1 and regexVal2 is false
var password="AaBbCcDd90";//both regexVal1 and regexVal2 is true
var password="AaBbCcDd90#¤";//both regexVal1 and regexVal2 is true

var password="AaBbCcDd90";的结果应为“ false”!

问题是:我在做什么错??

2 个答案:

答案 0 :(得分:3)

原因是-在字符类中具有特殊含义。因此,\+-£的意思是“ Unicode代码表中从'+'到'£'的所有字符”。

所以您需要在其中转义'-'。

是的,您不需要在那里转义所有其他字符

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[¤@+\-£$!%*#?&().:;,_]).{8,}$/g

对你应该没事

答案 1 :(得分:0)

足以在“ +”和“-”之前添加“ \”;

 var Regex1 =^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[¤@\+\-\£\$\!%\*#\?&\(\)\.\:;,_]).{8,}$

测试正则表达式的简便方法是使用以下网站:https://regex101.com/


这个例子也很好:

使用RegEx在JavaScript中测试密码强度

var mediumRegex = new RegExp("^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})");

https://www.thepolyglotdeveloper.com/2015/05/use-regex-to-test-password-strength-in-javascript/