Мне нужно проверить пароль, содержащий 3 из следующих 4:
- Строчная буква
- Заглавная буква
- Числовой символ
- Специальные символы (например,%, $, #, ...)
Длина пароля должна составлять от 6 до 20 символов. У меня сейчас есть это:
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();
}
}
Однако это вообще ни с чем не совпадает. Это для школьного проекта, так что мне действительно нужна помощь.
2 ответа
Вместо REGEX вы можете использовать:
string password = "aA1%";
HashSet<char> specialCharacters = new HashSet<char>() { '%', '$', '#' };
if (password.Any(char.IsLower) && //Lower case
password.Any(char.IsUpper) &&
password.Any(char.IsDigit) &&
password.Any(specialCharacters.Contains))
{
//valid password
}
Намного проще и понятнее.
РЕДАКТИРОВАТЬ:
Если вам нужно, чтобы выполнялись хотя бы 3 из этих 4 условий, вы можете:
int conditionsCount = 0;
if (password.Any(char.IsLower))
conditionsCount++;
if (password.Any(char.IsUpper))
conditionsCount++;
if (password.Any(char.IsDigit))
conditionsCount++;
if (password.Any(specialCharacters.Contains))
conditionsCount++;
if (conditionsCount >= 3)
{
//valid password
}
Последнее повторение здесь неверно:
Regex regex1 = new Regex("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]){6,20}$");
Вместо этого сделайте:
Regex regex1 = new Regex("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{6,20}$");
// notice the dot here ___^
И это то же самое для всех ваших регулярных выражений.
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.