Клиент попросил, чтобы я препятствовал тому, чтобы пользователи, ввели общие пароли, но разрешили им использовать только алфавитно-цифровые пароли.
Вы знаете, что регулярное выражение использует во встроенном PasswordStrengthRegularExpression
опция?
Править: Я знаю, довольно неопределенно, и это, что я сказал клиенту. Определение - что-то как
Это слишком многого требует от регекса. Вы можете достаточно легко решить проблему повторяющихся символов:
^(?:(.)(?!\1\1)){6,}$
Но единственный способ запретить прогон последовательных символов - это перечислить все возможности:
^(?:(?!123|234|345|456|567|678|789).)*$
... ad infinitum. Я думаю, лучшее, что можно сделать, это потребовать сложного сочетания типов символов - например, по крайней мере, по два из прописных букв, строчных букв и цифр:
^(?=(?:[^0-9]*[0-9]){2})
(?=(?:[^A-Z]*[A-Z]){2})
(?=(?:[^a-z]*[a-z]){2})
(?:([A-Za-z0-9])(?!\1\1)){6,}$
Это заставит пользователей проявить немного творчества.
Вы можете утверждать минимальный уровень сложности; е. грамм. «хотя бы одна прописная буква, одна строчная буква, одна цифра, минимальная длина 6 символов, только буквенно-цифровые символы» можно записать как
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9]{6,}$
try this:
passwordStrengthRegularExpression="^\S*([a-zA-Z0-9]{1,10})$"
Как насчет этого?
passwordStrengthRegularExpression=" @\"(?=.{6,})(?=(.*\d){1,})(?=(.*\W){1,})"
Проверяет соответствие пароля следующим критериям:
Я не уверен, что регулярное выражение может справиться с этим требованием, но функция в любом случае может быть более читабельной. Что-то вроде следующего исключит все, что содержит три последовательных одинаковых символа или три последовательных символа, которые следуют по возрастающей или убывающей схеме 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" };
Пройдет только последний. Функция может быть расширена, чтобы учитывать, разрешены ли и/или требуются ли неалфавитно-цифровые символы и должен ли пароль превышать минимальную длину.