【问题标题】:Regex expression for complex password setting angular 8复杂密码设置角度 8 的正则表达式
【发布时间】:2019-12-03 05:22:02
【问题描述】:

我试过这个表达方式——

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

这个正则表达式将强制执行这些规则:

至少一个大写英文字母(?=.*?[A-Z])

至少一个小写英文字母(?=.*?[a-z])

至少一位数字,(?=.*?[0-9])

至少有一个特殊字符,(?=.*?[#?!@$%^&*-])

至少 8 个长度 .{8,}(带有锚点)

以下要求的正则表达式将如何。

  • 13 个字符或更长的密码只需要小写 字母
  • 密码必须至少包含 8 个字符
  • 8 到 13 个字符之间的密码至少需要 3 个 以下4类字符:
    • 大写字母
    • 小写字母
    • 数字
    • 符号

【问题讨论】:

  • 好的,现在,您为什么要尝试使用单个正则表达式来处理具有如此多条件逻辑的如此复杂的任务?有句名言说“如果你有一个问题,你想用正则表达式解决,你现在有两个问题”。您为什么不为此使用良好的旧命令式编程呢?你知道...if (pass.length > 13) { checkPass13(pass) } 等。我的意思是正则表达式不是解决您问题的好方法
  • @Nemoden - 听起来不错
  • @Nemoden +1。除了正则表达式之外的任何东西几乎总是更容易推理:)

标签: javascript regex angular typescript angular8


【解决方案1】:

虽然单个正则表达式可能不是最易读/最理智的方式,但它实际上相当简单:

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

我只是在长度上添加了一个更改,因此 13+ 个字符只需要 [a-z] 而 8-12 个字符(由于排序可能会省略上限)需要完整的 monty。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-30
    • 2017-04-16
    • 2011-02-04
    • 2015-12-27
    • 2014-01-24
    • 2013-06-01
    • 2014-12-20
    • 2016-07-25
    相关资源
    最近更新 更多