【问题标题】:Regex for password: repetitive characters密码的正则表达式:重复字符
【发布时间】:2013-11-12 12:09:07
【问题描述】:

我有以下密码验证条件。

  • 密码长度必须至少为八 (8) 个字符。
  • 密码必须同时包含字母和数字字符。
  • 密码不能有重复字符(例如 AA、aa、00、11 等)。

我已尝试使用以下正则表达式,但缺少重复字符。
有什么建议吗?

var passw = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8}$/;  

【问题讨论】:

  • 为什么?!您是否有意降低密码的熵?我不能使用“aardvark2”作为我的密码?现在必须审查随机生成的密码以确保它们不包含重复的字符?你根本没有增加这里的安全性。
  • 是的..你是对的..但这是具体要求。
  • 他们试图阻止人们使用像aaaa1111这样的密码
  • @Barmar 如果没有额外的上下文信息可供攻击者使用,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 实际上比monkey12 更难猜测。 :)
  • 这并不像你想象的那样。虽然它确实确保您有一个数字、小写和大写,但它确保它们按该顺序显示

标签: regex


【解决方案1】:

匹配重复字符的正则表达式是/(.)\1/
我只需将其作为两步验证进行,无需将其整合到一个正则表达式中。
正如 cmets 中所指出的,这只会降低密码熵,从而提高安全性。

【讨论】:

    【解决方案2】:

    向前看是你的朋友:

    ^(?=.*\d)(?=.*[a-zA-Z])(?!.*(.)\1).{8,}
    

    【讨论】:

    • 这也需要超过 8 个字符
    • @user1037452 问题的第 2 句:密码长度必须至少八 (8) 个字符
    【解决方案3】:

    怎么样

    (?>([a-zA-Z])(?!\1)){8,}
    

    【讨论】:

      【解决方案4】:

      谢谢..得到答案^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*(.)\1).{8}$

      【讨论】:

        猜你喜欢
        • 2015-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-19
        • 2014-01-24
        • 1970-01-01
        相关资源
        最近更新 更多