【问题标题】:Special character validation for password using regex使用正则表达式对密码进行特殊字符验证
【发布时间】:2019-12-19 15:29:19
【问题描述】:

我正在尝试使用以下规则创建用于密码验证的正则表达式

  1. 至少一个大写字母
  2. 至少一个小写字母
  3. 至少一位数
  4. 允许的特殊字符中至少有一个
  5. 最少 8 个字符,最多 30 个字符

创建正则表达式

^(?!.* )(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@"#%$&])(?=.{8,30})

此表达式适用于大多数情况,但列表中不允许的特殊字符除外

例如Password@*123 显示为有效,即使 * 不在允许列表中。这是因为它与允许列表中的其他特殊字符一起出现。如果有任何特殊字符超出允许的列表,则表达式不应匹配。

var pwd = "Password@*123";
var pwdRegex = /^(?!.* )(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@"#%$&])(?=.{8,30})/;
var result = pwdRegex .test(pwd);

密码@*123 - 即使 * 不在允许列表中也显示为匹配

【问题讨论】:

    标签: regex


    【解决方案1】:

    解决此问题的一种方法是在当前模式的末尾仅匹配被较早的肯定前瞻之一在逻辑上列入白名单的字符。像这样的:

    ^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@"#%$&])[A-Za-z0-9!@"#%$&]{8,30}$
    

    Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-26
      • 2012-08-18
      • 2016-12-12
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 2015-01-05
      • 2011-05-22
      相关资源
      最近更新 更多