Javascript匹配特殊字符的功能

时间:2012-02-10 15:53:24

标签: javascript regex special-characters match

我正在处理此代码并使用“匹配”功能来检测密码的强度。如何检测字符串中是否包含特殊字符?

if(password.match(/[a-z]+/)) score++;
if(password.match(/[A-Z]+/)) score++;
if(password.match(/[0-9]+/)) score++;

6 个答案:

答案 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.
}