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