我正在处理此代码并使用“匹配”功能来检测密码的强度。如何检测字符串中是否包含特殊字符?
if(password.match(/[a-z]+/)) score++;
if(password.match(/[A-Z]+/)) score++;
if(password.match(/[0-9]+/)) score++;
答案 0 :(得分:9)
如果您的意思是!@#$%和ë作为特殊字符,您可以使用:
/[^a-zA-Z ]+/
^
表示它不是a-z或A-Z或空格。
如果你的意思只有像!@ $& $ use:
/\W+/
\w
匹配单词字符,\W
匹配不是单词字符。
答案 1 :(得分:4)
你必须将它们单独列入白名单,如下:
if(password.match(/[`~!@#\$%\^&\*\(\)\-=_+\\\[\]{}/\?,\.\<\> ...
等等。请注意,您必须使用\
转义正则表达式控制字符。
虽然不如/[^A-Za-z0-9]+/
那么优雅,但这样可以避免国际化问题(例如,不会自动将远东语言字符列入白名单,例如中文或日文)。
答案 2 :(得分:2)
你总是可以否定角色类:
if(password.match(/[^a-z\d]+/i)) {
// password contains characters that are *not*
// a-z, A-Z or 0-9
}
但是,我建议使用现成的脚本。使用上面的代码,您可以输入一堆空格,并获得更好的分数。
答案 3 :(得分:1)
只需执行上面所做的操作,但为!@#$%^&*()
等创建一个组。请确保转义在正则表达式中有意义的字符,例如^
和(
等...
编辑 - I just found this which lists characters that have meaning in regex。
答案 4 :(得分:1)
if(password.match(/[^\w\s]/)) score++;
这将匹配任何非字母数字或空格的内容。如果空格也匹配,只需使用/[^\w]/
。
答案 5 :(得分:1)
从你的正则表达式来看,除了字母数字之外,你正在调用一个特殊字符。如果是这种情况,那就干脆做。
if(password.match(/[\W]/)) {
// Contains special character.
}
无论如何你怎么不把这三个正则表达式合二为一。
if(password.match(/[\w]+/gi)) {
// Do your stuff.
}