【问题标题】:regex for weak password弱密码的正则表达式
【发布时间】:2011-01-20 13:46:37
【问题描述】:

我需要一个正则表达式来检查密码是否不等于某些单词(例如密码和 12345)。我尝试了一些组合,但在否定时遇到了麻烦。

如果相关,则用于 DataAnnotations 验证属性。

【问题讨论】:

  • 我不确定它是否完全重复,但您可能想看看这个至少非常相似的问题:stackoverflow.com/questions/3131025/strong-password-regex
  • “弱”密码列表会很长,而且永远不会完整。更好地定义强密码的要求并允许 P@$$w0rd
  • @ho1:不是重复的。我只想检查密码不是几个常见密码之一。 @ho1 & Henk:我同意,但这不是我的决定,只是业务需求。

标签: c# regex validation


【解决方案1】:

Regex 中的否定最适用于负前瞻,例如

"^(?!password)(?!12345)"

但是,我认为用户在创建错误密码时可能非常聪明,而创建一个能够捕获所有密码的表达式将非常困难。

【讨论】:

  • 同意延斯。如果您真的关心密码强度,那么您应该全力以赴并实施密码强度算法。维基百科上有一些信息:en.wikipedia.org/wiki/Password_strength
  • @Jens:不幸的是,这会导致我输入的任何文本都无法验证。有什么想法吗?
  • ToUpper 并检查字典,对各种字符类型进行计数等。
  • @TheFlowerGuy:也许 DataAnnotations 会自动锚定正则表达式。在这种情况下,您必须在末尾添加 .*
  • @The Flower Guy:在每个单词后添加$ 以允许“password7”=)。 IE。 ^(?!password$)..
【解决方案2】:

您真的想使用正则表达式来完成此操作吗?你想出的“弱”词越多,正则表达式就会越长越混乱。为什么不直接创建一个不被接受的单词列表,并使用循环/LINQ 来检查密码是否包含其中的任何一个?它仍然非常快速且易于阅读。

您所要求的正则表达式或我上面的解决方案都没有处理的一件事是检测 n 个连续数字/字符。你只是在寻找12345吗?或者您是否正在寻找可以检测字符串(如 1234567、1234 或 56789)的东西?这将需要一些额外的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 2012-05-30
    相关资源
    最近更新 更多