我正在使用以下正则表达式来匹配一个或多个特殊字符以进行密码强度测试。
if (password.match(/\W+/)) points++;
这似乎与下划线'_'不匹配是一个特殊字符。为什么这样,我该如何解决?
答案 0 :(得分:4)
这是因为\W
与[^\w]
相同,而\w
contains a-z
, A-Z
, 0-9
, and _
也是如此。
为了解决此问题,只需分别添加_
字符:
if (password.match(/[\W_]+/)) points++;
答案 1 :(得分:2)
\W
(大写)表示not \w
,所以除了单词字符外都有。
单词字符(\w
)包括字母,数字和下划线。
也许您应该使用/[^a-z0-9]+/i
来匹配非字母。
答案 2 :(得分:0)
您确定不想要\w
吗? \W
是对\w
的否定。
\w
匹配(字母,数字和下划线),因此\W
与字母,数字和下划线不匹配。见这里:http://www.regular-expressions.info/reference.html
答案 3 :(得分:0)
匹配失败,因为下划线被视为单词字符。来自MDN documentation for \W
:
匹配任何非单词字符。相当于[^ A-Za-z0-9 _]
您可以通过将下划线和\W
分组来解决此问题:
if (password.match(/[\W_]+/)) points++;
诸如Javascript Regex Tester之类的正则表达式工具对于调试此类事物特别有用。