我已经用正则表达式弄乱了特殊字符几个小时了,必须承认我放弃了。
尝试创建密码测试功能,该功能测试以下至少一项:小写,大写,整数和特殊字符。
特殊字符为“¤@ +-£$!%*#?&()。:;,_”。
我已使用此功能对它们进行转义:
//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”!
问题是:我在做什么错??
答案 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/