【发布时间】:2012-12-22 13:19:13
【问题描述】:
我正在使用以下正则表达式来匹配一个或多个特殊字符以进行密码强度测试。
if (password.match(/\W+/)) points++;
这似乎与作为特殊字符的下划线“_”不匹配。为什么会这样,我该如何解决?
【问题讨论】:
标签: javascript regex passwords
我正在使用以下正则表达式来匹配一个或多个特殊字符以进行密码强度测试。
if (password.match(/\W+/)) points++;
这似乎与作为特殊字符的下划线“_”不匹配。为什么会这样,我该如何解决?
【问题讨论】:
标签: javascript regex passwords
这是因为\W与[^\w]相同,而\w contains a-z, A-Z, 0-9, and _也是。
为了修复它,只需单独添加_ 字符:
if (password.match(/[\W_]+/)) points++;
【讨论】:
\W 不包括字母、数字和下划线!
\W(大写)表示not \w,所以除了单词字符之外的任何东西。
单词字符 (\w) 包括字母、数字和下划线。
也许你应该使用/[^a-z0-9]+/i 来匹配非字母。
【讨论】:
您确定不想要\w 吗? \W 是\w 的否定。
\w 匹配(字母、数字和下划线),所以\W 不匹配字母、数字和下划线。见这里:http://www.regular-expressions.info/reference.html
【讨论】:
匹配失败,因为下划线被视为单词字符。来自MDN documentation for\W:
匹配任何非单词字符。等价于 [^A-Za-z0-9_]
您可以通过将下划线和\W 分组来解决此问题:
if (password.match(/[\W_]+/)) points++;
诸如Javascript Regex Tester 之类的正则表达式工具对于调试这类事情特别有帮助。
【讨论】: