Я знаю, что это старая ветка, но у меня есть то, что может быть довольно простым решением для кого-то, чтобы использовать. Легко реализовать, легко понять и легко проверить.
Рассмотрим следующее требование:
Мне нужен случайный пароль, который должен содержать как минимум 2 буквы в нижнем регистре, 2 буквы в верхнем регистре и 2 цифры. Пароль также должен содержать не менее 8 символов.
Следующее регулярное выражение может проверить этот случай:
^(?=\b\w*[a-z].*[a-z]\w*\b)(?=\b\w*[A-Z].*[A-Z]\w*\b)(?=\b\w*[0-9].*[0-9]\w*\b)[a-zA-Z0-9]{8,}$
Это выходит за рамки этого вопроса, но регулярное выражение основано на lookahead / lookbehind и lookaround .
Следующий код создаст случайный набор символов, которые соответствуют этому требованию:
public static string GeneratePassword(int lowercase, int uppercase, int numerics) {
string lowers = "abcdefghijklmnopqrstuvwxyz";
string uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string number = "0123456789";
Random random = new Random();
string generated = "!";
for (int i = 1; i <= lowercase; i++)
generated = generated.Insert(
random.Next(generated.Length),
lowers[random.Next(lowers.Length - 1)].ToString()
);
for (int i = 1; i <= uppercase; i++)
generated = generated.Insert(
random.Next(generated.Length),
uppers[random.Next(uppers.Length - 1)].ToString()
);
for (int i = 1; i <= numerics; i++)
generated = generated.Insert(
random.Next(generated.Length),
number[random.Next(number.Length - 1)].ToString()
);
return generated.Replace("!", string.Empty);
}
Чтобы выполнить вышеуказанное требование, просто позвоните по следующему номеру:
String randomPassword = GeneratePassword(3, 3, 3);
Код начинается с недопустимого символа ("!"
) - поэтому длина строки может быть введена новыми символами.
Затем выполняется цикл от 1 до необходимого количества символов в нижнем регистре, и на каждой итерации выбирает случайный элемент из списка в нижнем регистре и вставляет его в произвольном месте строки.
Затем повторяется цикл для прописных букв и цифр.
Возвращает строки длиной = lowercase + uppercase + numerics
, в которые строчные, прописные и числовые символы нужного вам числа были расположены в случайном порядке.