我的密码强度指标有以下javascript代码:
if (password.match(/([!,@,#,$,%])/)
{
strength += 2
}
所以这样做,如果密码包含这些允许的字符之一(!,@,#,$,%),它会为指标的强度添加一个值。
我的问题是,一旦密码上出现其他特殊字符,我也想降低密码指示器的强度。例如:^,`,〜,<,>
为了消除混淆,基本上我不想要任何其他特殊字符,除了上面提到的字符(!,@,#,$,%)。所以我做了硬编码,编写了我不想要的所有特殊字符。
我试过用这个:
if (password.match(/([^,`,~,<,>])/)
{
strength -= 2
}
但我也不想包含"
,'
和,
但是如果我将它们包含在我的if条件中,它会给我一个错误,说明语法错误正则表达式。我理解这一点,因为我知道"
表示必须关闭的字符串。我能为此做些什么吗?提前谢谢!
答案 0 :(得分:2)
您不需要用逗号分隔您的个别字符,也不需要用括号括起唯一的字词。
这应该有效:
/[`^~<>,"']/
请注意克拉(^
不在前面,这在放置在[]
区块的开头时具有特殊含义)
此外,您应该使用test()
,因为您只需要一个布尔if-contains结果
/[`^~<>,"']/.test(password)
答案 1 :(得分:2)
您要做的是使用"
逐出'
,,
和\
。你正在寻找的正则表达式是:
/([\^\`\~\<\,\>\"\'])/
我实际上是使用JSVerbalExpressions库生成的。我强烈建议你看看吧!为了向您展示它是多么棒,生成上述正则表达式的代码是:
var tester = VerEx()
.anyOf("^,`'\"~<>");
console.log(tester); // /([\^\`\~\<\,\>\"\'])/
答案 2 :(得分:1)
在方括号中包含这些特殊字符,不带逗号,看看它是否有效。
你可以在这里试试 - http://jsfiddle.net/BCn7h/
例如:
if (password.match(/["',]/)
{
strength -= 2
}