【问题标题】:An atypical password validation regexp: at least 3 letters, 3 numbers, no double-quotes一个非典型的密码验证正则表达式:至少 3 个字母,3 个数字,没有双引号
【发布时间】:2015-09-06 08:23:03
【问题描述】:

此正则表达式适用于 < input type="password" ... /> 内的 HTML5 pattern="...",应为:

  1. 不少于 8 个字符,不多于 32 个。
  2. 必须至少包含 3 个字母。
  3. 必须至少包含 3 个数字。
  4. 必须包含除双引号外的任何其他 ASCII 字符(单引号也可以)。

这是我想出来的:

^.*(?=.{8,32})(?=.*[a-zA-Z]{3,})(?=.*\d{3,})(? =.*[^\x22]+).*$

但这里有问题:

  1. 密码中仍允许使用双引号!
  2. 此表达式仅在有三个连续数字或字母时才匹配,而不是在它们与其他字符穿插时匹配。

我花了一整天的时间阅读尽可能多的文档:O'Reilly 的文档、在线文档等,如果我无法弄清楚这一点,我就要绞尽脑汁了。

任何帮助都将不胜感激,您将节省一颗子弹和一颗大脑。

【问题讨论】:

  • 有时间阅读文档,也有时间尝试自己。您正在寻找的模式并不复杂。我建议您花时间准确理解您的实际模式的含义(特别是前瞻的工作原理以及它们在特定位置是零宽度断言的事实)并进行实验。 (链接:regex101.com)。也看看其他密码/正则表达式问题。祝你好运。
  • 试试^(?=(?:[^a-zA-Z]*[a-zA-Z]){3})(?=(?:\D*\d){3})[^\x22]{8,32}$
  • 谢谢,@stribizhev!这与 anubhava 的示例非常相似,但包括转义双引号所需的 \x22。 -- 已编辑: -- (?:[^a-zA-Z]*[a-zA-Z]) 和 (?:.*?[a-zA-Z]) 有什么区别?跨度>
  • 复杂的密码规则通常不会带来更安全的密码,重要的只是最小长度。人们无法记住大量的强密码,这样的规则会干扰好的密码方案。人们可以非常有创意地绕过这些规则,例如通过使用弱密码,如Password-2015。通常,您最终会得到较弱的密码,而不是较强的密码。

标签: regex html validation input passwords


【解决方案1】:

你可以使用这个正则表达式:

^(?=(?:.*?[a-zA-Z]){3})(?=(?:.*?\d){3})[^\x22]{8,32}$

ReGEx Demo

甚至:

^(?=(?:[^a-zA-Z\n]*[a-zA-Z]){3})(?=(?:[^\d\n]*\d){3})[^\x22]{8,32}$

【讨论】:

  • 太棒了!非常感谢,@anubhava。您能否将 [^"] 编辑为 [^\x22],因为这需要放在 HTML5 模式="" 中,并且我们需要在双引号内工作。您对 stribizhev 和我上面的评论有何看法?跨度>
  • 好的答案已更新。 ^(?=(?:[^a-zA-Z]*[a-zA-Z]){3})(?=(?:\D*\d){3})[^\x22]{8,32}$ 也可以工作,但在 regex101 上,您需要将其设为 ^(?=(?:[^a-zA-Z\n]*[a-zA-Z]){3})(?=(?:\D*\d){3})[^\x22]{8,32}$,因为您有多个输入,并且 [^a-zA-Z]* 也匹配换行符,因此它跨行。 在答案中查看我更新的演示链接
  • 所以最短的工作正则表达式是:^(?=(?:.*?[a-zA-Z]){3})(?=(?:.*?\d){3})[^\x22]{8,32}$,但效率会稍低。
  • 哇,这些现在完全有道理,我明白我做错了什么。感谢@anubhava 帮助我更好地理解这种语言!
【解决方案2】:

想出了这个东西:

^(?=(.*?[a-zA-Z]){3,})(?=(.*?\d){3,})(?=.*?[^a-zA-Z0-9\"])[^\"]{8,32}$

https://regex101.com/r/nY0bL2/1 - 用于测试重写第一行,多行不管什么原因都不能正常工作。

【讨论】:

  • 谢谢,感谢您的努力。没错,如果字符串中没有空格或换行符,这将不起作用。
猜你喜欢
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多