非典型密码验证正则表达式:至少 3 个字母、3 个数字、无双引号

An atypical password validation regexp: at least 3 letters, 3 numbers, no double-quotes

此正则表达式适用于 < 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 的、在线文档等,如果我无法弄清楚这一点,我将要绞尽脑汁。

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

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

^(?=(?:.*?[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}$

想出了这个东西:

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

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