【问题标题】:Javascript match function for special characters特殊字符的Javascript匹配函数
【发布时间】:2023-03-20 16:02:01
【问题描述】:
我正在处理此代码并使用“匹配”功能来检测密码强度。如何检测字符串中是否包含特殊字符?
if(password.match(/[a-z]+/)) score++;
if(password.match(/[A-Z]+/)) score++;
if(password.match(/[0-9]+/)) score++;
【问题讨论】:
标签:
javascript
regex
special-characters
match
【解决方案1】:
如果您的意思是 !@#$% 和 ë 作为特殊字符,您可以使用:
/[^a-zA-Z ]+/
^ 表示它不是 a-z 或 A-Z 或空格。
如果你的意思只是像 !@$&$ 使用:
/\W+/
\w 匹配单词字符,\W 匹配非单词字符。
【解决方案2】:
您必须将它们单独列入白名单,如下所示:
if(password.match(/[`~!@#\$%\^&\*\(\)\-=_+\\\[\]{}/\?,\.\<\> ...
等等。请注意,您必须使用 \ 转义正则表达式控制字符。
虽然不如/[^A-Za-z0-9]+/ 优雅,但这将避免国际化问题(例如,不会自动将远东语言字符(如中文或日语)列入白名单。
【解决方案3】:
你总是可以否定字符类:
if(password.match(/[^a-z\d]+/i)) {
// password contains characters that are *not*
// a-z, A-Z or 0-9
}
但是,我建议使用现成的脚本。使用上面的代码,你只需输入一堆空格,就能得到更好的分数。
【解决方案5】:
if(password.match(/[^\w\s]/)) score++;
这将匹配任何不是字母数字或空格的内容。如果空格也应该匹配,只需使用/[^\w]/。
【解决方案6】:
从您的正则表达式中可以看出,您将除字母数字之外的所有内容都称为特殊字符。如果是这种情况,那就去做吧。
if(password.match(/[\W]/)) {
// Contains special character.
}
无论如何,为什么不将这三个正则表达式合二为一。
if(password.match(/[\w]+/gi)) {
// Do your stuff.
}