Я не уверен, что регулярное выражение может обработать требование, но в любом случае функция может быть более читабельной. Нечто похожее на приведенное ниже устранит что-либо с тремя последовательными равными символами или тремя последовательными символами, которые следуют по возрастанию или убыванию 1 (буквы или цифры).
static bool IsPasswordRelativelyStrong(string input)
{
for (int i = 2; i < input.Length; i++)
{
if (input[i] == input[i - 1] - 1 && input[i - 1] == input[i - 2] - 1)
return false;
else if (input[i] == input[i - 1] + 1 && input[i - 1] == input[i - 2] + 1)
return false;
else if (input[i] == input[i - 1] && input[i - 1] == input[i - 2])
return false;
}
return true;
}
Итак, учитывая следующий массив
string[] passwords = { "123456", "abcde", "654321", "111223", "11223344" };
Проходит только последний. Эту функцию можно расширить, чтобы определить, разрешаете ли вы и / или запрашиваете не алфавитно-цифровые символы, и должен ли пароль превышать минимальную длину.