密码规则的这个正则表达式有什么问题

Ral*_*ton 1 regex

我正在尝试至少2个字母,至少2个非字母,长度至少6个字符:

^.*(?=.{6,})(?=[a-zA-Z]*){2,}(?=[0-9@#$%^&+=]*){2,}.*$
Run Code Online (Sandbox Code Playgroud)

但是在很多层面都错过了标记,但我不确定为什么.有什么建议?

Jar*_*Par 10

虽然这种类型的测试可以使用正则表达式完成,但进行非正则表达式检查可能更容易且更易于维护.实现这一目标的正则表达式相当复杂,有点难以理解.但是运行此测试的代码非常简单.例如,将以下方法作为您的需求的实现(语言C#)

public bool IsValid(string password) {
  // arg null check ommitted
  return password.Length >= 6 &&
         password.Where(Char.IsLetter).Count() > 2 &&
         password.Where(x => !Char.IsLetter(x)).Count() > 2;
}
Run Code Online (Sandbox Code Playgroud)

  • 比任何可以做同样的正则表达清晰得多. (3认同)