Регулярное выражение, чтобы проверить, содержит ли данный пароль хотя бы одно число и одну букву в С#?

Может ли кто-нибудь помочь мне написать регулярное выражение для проверки того, имеет ли пароль хотя бы одну букву и один номер в нем?

У меня есть требование, чтобы пароли пользователей были буквенно-цифровыми, и я хочу проверить это, используя регулярное выражение.

Ответы

Ответ 1

Положительный взгляд - это то, что вы ищете. Регулярное выражение выглядит следующим образом:

(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]+

Здесь (?=.*[A-Za-z]) - это положительный взгляд, который утверждает, что ваша строка как хотя бы один символ и (?=.*[0-9]) утверждает, что она имеет хотя бы одну цифру. Важно отметить, что положительный lookahead не возвращает совпадение, а скорее утверждает, существует ли совпадение или нет. Итак, вы должны прочитать предыдущее регулярное выражение как "утверждать, что он имеет хотя бы один символ, утверждают, что он имеет хотя бы одну цифру, теперь, когда мы знаем, что утверждения прошли, просто проверьте буквенно-цифровые символы".

Это очень интересно, потому что это позволяет вам легко комбинировать требования к валидации вашего приложения, не делая ваше регулярное выражение очень сложным. Например, если теперь требуется, чтобы строка имела ровно 20 символов, вам просто нужно добавить новое положительное утверждение, например:

(?=[A-Za-z0-9]{20})(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]+

Надеюсь, что это поможет!

Ответ 2

Если вы хотите его в одном регулярном выражении, вы можете использовать "[a-zA-Z].*\\d|\\d.*[a-zA-Z]", хотя две отдельные проверки могут быть более читаемыми.

Изменить: подход с двумя проверками, который я считаю вполне читаемым, может выглядеть так:

Regex.IsMatch(password, "\\d") && Regex.IsMatch(password, "[a-zA-Z]")

Ответ 3

bool isValid = Regex.IsMatch(password, @"[a-zA-Z]") &&
               Regex.IsMatch(password, @"\d");