【问题标题】:Password regex that requires “at least two of” certain characters需要“至少两个”某些字符的密码正则表达式
【发布时间】:2020-12-24 21:59:30
【问题描述】:

我正在研究 javascript 正则表达式,其中包括以下条件。到目前为止没有运气。

-允许的最小字符数为 8。

-允许的最大字符数为 64。

- 输入的文本应至少包含以下两项 - 数字、小写字母、大写 字母、特殊字符。

-不支持输入符号。

到目前为止,我所拥有的是@anubhava 答案here

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

此正则表达式将强制执行以下规则:

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

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

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

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

-最少八个长度。{8,63}(带有锚点)

我的问题是如何满足我的第三和第四个条件:-

- 输入的文本应至少包含以下两项 - 数字、小写字母、大写 字母、特殊字符。

-不支持输入符号。

任何帮助将不胜感激。

【问题讨论】:

  • 不可能做到简洁。我会改用编程逻辑。
  • 知道如何在 .NET 中进行操作吗?
  • (?=.*?\d.*?\d) 应该匹配“2 个数字”,不是吗?
  • 另外,考虑 Unicode 类别,因为不是每个人都使用相同的字符..
  • 对于.NET(不知道为什么在这种情况下问题被标记为JS..),可以使用简单的循环和char.GetUnicodeCategory或其他方法将输入转换为基于字符类的直方图分类(包括更具体的规则)。或者通过一些string#IndexOf 调用等绕过直方图。

标签: javascript regex passwords


【解决方案1】:
^(?!.*[^A-Za-z0-9#?!@$%^&*-]$)(?![a-z]*$)(?![A-Z]*$)(?![0-9]*$)(?![#?!@$%^&*-]*$).{8,64}$

字符串不应包含 4 组字符之外的任何符号

^(?!.*[^A-Za-z0-9#?!@$%^&*-]$)

字符串不应仅由小写字母组成

(?![a-z]*$)

字符串不应仅由大写字母组成

(?![A-Z]*$)

字符串不应仅由数字组成

(?![0-9]*$)

字符串不应只包含特殊字符

(?![#?!@$%^&*-]*$)

字符串应由 8 到 64 个字符组成

.{8,64}$

2020 年 9 月 7 日更新

如果字符串应该包含列表 3 组 4 的符号

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

字符串不应包含 4 组字符之外的任何符号

^(?!.*[^A-Za-z0-9#?!@$%^&*-]$)

然后是 3 组 4 的 4 个变体,这些符号应该是其中的成员:

(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])

(?=.*[a-z])(?=.*[A-Z])(?=.*[#?!@$%^&*-])

(?=.*[a-z])(?=.*[0-9])(?=.*[#?!@$%^&*-])

(?=.*[A-Z])(?=.*[0-9])(?=.*[#?!@$%^&*-])

最后,字符串应该由 8 到 64 个字符组成

.{8,64}$

【讨论】:

  • 您能否根据此更新您的答案 - 输入的文本应至少包含以下 三个 - 数字、小写字母、大写字母、特殊字符。 @J200200831a
【解决方案2】:

var regex =/^(?=.*\d)(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[A-Z]).{8,64}$/;

 
function test() {

 if(regex.test(document.getElementById("txtPassword").value)===false)
 {
 alert("Min 8,Max 64,At Least One Uppercase Character,One Lowercase Character,One Numeric Value And One Special Character(!@#$%^&*) Required ");
 }
 else
 {
 alert("Success");
 }
}
<input type="text" id="txtPassword" />
<button id="testBtn" onclick=test()>CheckPassword</button>
 

【讨论】:

    【解决方案3】:

    文本至少包含以下 两个 - 数字、小写字母、大写字母、特殊字符。 [A-Za-z0-9#?!@$%^&*-] 之外没有字符

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

    文本至少包含以下 三个 - 数字、小写字母、大写字母、特殊字符。 [A-Za-z0-9#?!@$%^&*-] 之外没有字符

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 1970-01-01
      • 2012-05-30
      • 2011-09-05
      • 2015-01-18
      • 1970-01-01
      • 2021-02-18
      相关资源
      最近更新 更多