【问题标题】:Do not allow special characters except the allowed characters javascript regex不允许使用除允许字符外的特殊字符 javascript regex
【发布时间】:2013-08-23 06:46:29
【问题描述】:

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

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

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

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

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

我试过用这个:

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

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

【问题讨论】:

  • 请自学:RegExp
  • 提醒您,正则表达式的[] 中的字符不是逗号分隔的,也不需要任何分隔符。
  • 不要在括号 [!@#$%][^`~&lt;&gt;] 中使用逗号
  • 感谢您让我知道这些人。

标签: javascript regex


【解决方案1】:

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

这应该可行:

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

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

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

/[`^~<>,"']/.test(password)

【讨论】:

  • 但如果我在里面包含/,它会给我一个错误,例如:(/[~^()/]/)
  • 然后通过在前面加上反斜杠来转义它。例如/[~^()\/]/。学习@Teemu 的链接
【解决方案2】:

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

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

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

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

console.log(tester); // /([\^\`\~\<\,\>\"\'])/

【讨论】:

  • 除了^在第一个位置和正则表达式/的分隔符之外,不需要转义字符类中的任何字符。最终- 不在第一个或最后一个位置。
【解决方案3】:

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

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

例如:

if (password.match(/["',]/)
{
    strength -= 2
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    相关资源
    最近更新 更多