除了允许的字符javascript正则表达式之外,不允许使用特殊字符

时间:2013-08-23 06:46:30

标签: javascript regex

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

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

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

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

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

我试过用这个:

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

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

3 个答案:

答案 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
}