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

时间:2009-10-15 15:58:20

标签: c# regex

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

必须介于6到20个字符之间,且至少包含一个大写字母,一个小写字母和一个数字

3 个答案:

答案 0 :(得分:7)

我认为这有效:

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{6,20}$

这是test cases in Regex Hero

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

答案 1 :(得分:4)

正则表达式用于搜索,而不是用于验证。您不应该努力在单个正则表达式中执行此操作。

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

    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, "[a-z]") ||
            !Regex.IsMatch(password, "[A-Z]"))
        {
            return false;
        }
        else
        {
            return true;
        }
    }

这比在过于复杂的Regex中编码所有可能的组合更有效。

答案 2 :(得分:0)

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

^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$

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