【发布时间】:2019-01-29 09:25:01
【问题描述】:
我已经在正则表达式中搞砸了几个小时的特殊字符,并且必须承认我放弃了。
尝试做一个密码测试函数,测试至少以下之一:小写、大写、整数和特殊字符。
特殊字符为“¤@+-£$!%*#?&().:;,_”。
我用这个函数来转义它们:
//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"; 的结果应该是“假”!
问题是:我做错了什么??
【问题讨论】:
-
在字符类中,您不需要像您想象的那样进行转义。见regular-expressions.info/refcharclass.html
标签: javascript regex