Javascript RegExp特殊字符转义

Javascript RegExp特殊字符转义,javascript,regex,Javascript,Regex,我已经在正则表达式中处理特殊字符好几个小时了,我必须承认我放弃了 尝试创建一个密码测试函数,该函数至少测试以下内容之一:小写、大写、整数和特殊字符 特殊字符为“@+-英镑$!%*#?&():;,3;” 我已使用此函数对其进行了转义: //用于转义特殊字符[·@+-英镑$!%*#?&():;,] RegExp.escape=函数(str){ 返回字符串(str).replace(/([.*+?^=!:${}()\[\]\/\])/g,“\\$1”); }; 并在这两个测试中测试正则表达式: va

我已经在正则表达式中处理特殊字符好几个小时了,我必须承认我放弃了

尝试创建一个密码测试函数,该函数至少测试以下内容之一:小写、大写、整数和特殊字符

特殊字符为“@+-英镑$!%*#?&():;,3;”

我已使用此函数对其进行了转义:

//用于转义特殊字符[·@+-英镑$!%*#?&():;,]
RegExp.escape=函数(str){
返回字符串(str).replace(/([.*+?^=!:${}()\[\]\/\])/g,“\\$1”);
};
并在这两个测试中测试正则表达式:

var pattern1=/^(?=.[a-z])(?=.[a-z])(?=.*\d)(?=.[@\+-\$!%\*\?&(\)\:;,)。{8,}$/g;
var regexVal1=pattern1.test(密码);
var pattern2=new RegExp(“^(?=.[a-z])(?=.[a-z])(?=.[0-9])(?=.[@\+-\$!%\*\?&(\)\:;,,,)。{8,}$,“g”);
var regexVal2=pattern2.test(密码);
结果是:

var password=“AaBbCcDd”//regexVal1和regexVal2都为false
var password=“AaBbCcDd90”//regexVal1和regexVal2都是真的
var password=“AaBbCcDd90#·”//regexVal1和regexVal2都是真的
来自
var password=“AaBbCcDd90”的结果应为“false”


问题是:我做错了什么?

原因是
-
在字符类中有特殊意义。所以它里面的
\+-£
表示“Unicode代码表中从“+”到“£”的所有字符”

所以你需要逃离那里

是的,你不需要转义那里的所有其他角色

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[¤@+\-£$!%*#?&().:;,_]).{8,}$/g
如果在“+”和“-”之前加上“\”,就足够了

测试正则表达式的简单方法是使用以下网站:


这个例子也很好:

使用正则表达式测试JavaScript中的密码强度

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

在角色类中,您不需要像想象的那样进行大量转义。再见,非常感谢。成功了。当然,我只需要逃避-,但我必须承认,我对这个问题视而不见,这在我处理正则表达式时经常发生。顺便说一句,当使用“new RegExp()”时,它应该是双转义的。您可以将
-
放在字符类的开头:
[-·@+$!%*?&():;,\u]
..或放在最后,以避免转义。但仍有可能有人“在允许的字符列表中再添加一个字符”,并再次破坏一切:(
var mediumRegex = new RegExp("^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})");