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