JavaScript中用于匹配特殊字符的match函数

4
我正在处理这段代码,并使用“match”函数来检测密码的强度。如何检测字符串中是否有特殊字符?
if(password.match(/[a-z]+/)) score++;
if(password.match(/[A-Z]+/)) score++;
if(password.match(/[0-9]+/)) score++;

2
任何不是字母或数字的字符都将被视为特殊字符匹配。 - mrtsherman
7个回答

12

如果您指的是 !@#$% 和 ë 作为特殊字符,您可以使用:

/[^a-zA-Z ]+/

^ 表示不是 a-z 或 A-Z 或空格之类的字符。

如果你只想匹配 !@$&$ 这样的字符,可以使用:

/\W+/

\w匹配单词字符,\W匹配非单词字符。


4
您需要单独将它们加入白名单,如下所示:
if(password.match(/[`~!@#\$%\^&\*\(\)\-=_+\\\[\]{}/\?,\.\<\> ...

等等。请注意,您必须使用\转义正则表达式控制字符。

虽然不如/[^A-Za-z0-9]+/优雅,但这将避免国际化问题(例如,不会自动将远东语言字符(如中文或日文)列入白名单)。


2

你总是可以否定字符类:

if(password.match(/[^a-z\d]+/i)) {
    // password contains characters that are *not*
    // a-z, A-Z or 0-9
}

然而,我建议使用现成的脚本。使用上述代码,您只需键入一堆空格即可获得更高的分数。


1
从你的正则表达式来看,除了字母数字以外的所有字符都被视为特殊字符。如果是这样的话,只需要执行以下操作即可。
if(password.match(/[\W]/)) {
    // Contains special character.
}

无论如何,你为什么不把这三个正则表达式合并成一个呢。

if(password.match(/[\w]+/gi)) {
    // Do your stuff.
}

1

1
if(password.match(/[^\w\s]/)) score++;

这将匹配任何非字母数字或空格的字符。如果想匹配空格,只需使用 /[^\w]/


0

/[^a-zA-Z0-9 ]+/ 这将只接受特殊字符,不接受a到z和A到Z的0到9数字


1
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接