0

我的密码强度指示器有以下 javascript 代码:

if (password.match(/([!,@,#,$,%])/)
{
    strength += 2
}

因此,如果密码包含这些允许的字符之一 (!,@,#,$,%),它将为指标的强度添加一个值。

我的问题是,一旦密码上出现其他特殊字符,我还想降低密码指示器的强度。例如:^,`,~,<,>

为了消除混淆,基本上我不想要任何其他特殊字符,除了上面存在的那些(!,@,#,$,%)。所以我做了硬编码,写了所有我不想要的特殊字符。

我尝试使用这个:

if (password.match(/([^,`,~,<,>])/)
{
    strength -= 2
}

但我也不想包含",但是如果我在我的 if 条件中包含它们,它会抛出一个错误,说正则表达式的语法错误。我理解这一点,因为我知道代表一个必须关闭的字符串。我能做点什么吗?提前致谢!',"

4

3 回答 3

2

您想要做的是转义每个",',使用\. 您正在寻找的正则表达式是:

/([\^\`\~\<\,\>\"\'])/

我实际上是使用JSVerbalExpressions库生成的。我强烈建议您检查一下!为了向您展示它有多棒,生成上述正则表达式的代码是:

var tester = VerEx()
            .anyOf("^,`'\"~<>");

console.log(tester); // /([\^\`\~\<\,\>\"\'])/
于 2013-08-23T07:02:29.463 回答
2

您不需要用逗号分隔各个字符,也不需要将唯一的术语括在括号中。

这应该有效:

/[`^~<>,"']/

注意克拉(^不是在前面,这在放置在[]块的开头时具有特殊含义)

你也应该使用test(),因为你只想要一个布尔 if-contains 结果

/[`^~<>,"']/.test(password)
于 2013-08-23T06:54:19.853 回答
1

将这些特殊字符包含在不带逗号的方括号中,看看它是否有效。

你可以在这里试试 - http://jsfiddle.net/BCn7h/

例如:

if (password.match(/["',]/)
{
    strength -= 2
}
于 2013-08-23T07:00:51.663 回答