I need to check for a password containing 3 of the following 4:
- Lowercase letter
- Uppercase letter
- Numeric character
- Special characters (like %, $, #, ...)
The length of the password has to be between 6 and 20 characters. I currently have this:
public void ChangePassword(string password)
    {
        Regex regex1 = new Regex("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]){6,20}$");
        Regex regex2 = new Regex("^(?=.*[0-9])(?=.*[a-z])(?=.*?[#?!@$%^&*-]){6,20}$");
        Regex regex3 = new Regex("^(?=.*[0-9])(?=.*[A-Z])(?=.*?[#?!@$%^&*-]){6,20}$");
        Regex regex4 = new Regex("^(?=.*[a-z])(?=.*[A-Z])(?=.*?[#?!@$%^&*-]){6,20}$");
        Regex regex5 = new Regex("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*?[#?!@$%^&*-]){6,20}$");
        Match match1 = regex1.Match(password);
        Match match2 = regex2.Match(password);
        Match match3 = regex3.Match(password);
        Match match4 = regex4.Match(password);
        Match match5 = regex5.Match(password);
        if (match1.Success || match2.Success || match3.Success ||
            match4.Success || match5.Success)
        {
            Password = password;
        }
        else
        {
            throw new PasswordNotGoodException();
        }
    }
However, this doesn't match anything at all. It's for a school project, so I really could use some help.
 
     
    