.NET RegEx用于validation6到20个字符之间的密码,至少包含一个大写字母,一个小写字母和一个数字

我需要一个正则表达式来validation密码,并使用以下规范:

它必须在6到20个字符之间,至少有一个大写字母,一个小写字母和一个数字

我认为这有效:

^(?=.*[AZ])(?=.*[az])(?=.*[0-9]).{6,20}$ 

这是Regex Hero中的测试用例 。

我们的想法是使用积极的前瞻来确保密码中包含至少一个小写字母,一个大写字母和一个数字。 然后作为最后一步,我只需指定一个点,以允许6-20个字符范围内的任何字符。

正则表达式用于搜索,而不是用于validation。 你不应该努力在一个正则表达式中这样做。

话虽如此,因为你正在寻找字符类,并且由于正则表达式非常好地支持它们,我建议使用两个或三个正则表达式,检查每个正则表达式的匹配。

  bool IsPasswordValid(string password) { if (string.IsNullOrEmpty(password) || password.Length > 20 || password.Length < 6) { return false; } else if(!Regex.IsMatch(password, "\d") || !Regex.IsMatch(password, "[az]") || !Regex.IsMatch(password, "[AZ]")) { return false; } else { return true; } } 

这比在过于复杂的正则表达式中尝试编码所有可能的组合更有效。

这允许空格和特殊字符,但应遵循您的规范:

 ^(?=.*\d)(?=.*[AZ])(?=.*[az]).{6,20}$ 

我使用Expresso来帮助测试我的.Net正则表达式。