Regex для проверки пароля, возвращая false для правильных паролей

1

Я попытался написать регулярное выражение для проверки паролей, но он возвращает false для действительных паролей.

Пароли должны иметь как минимум 3 из следующих:

  • Digits
  • Заглавные буквы
  • Строчные буквы
  • Специальные символы

Ограничений на длину пароля нет.

Это моя попытка:

@"^(?=(.*\d){3})(?=(.*[a-z]){3})(?=(.*[A-Z]){3})(?=(.*[^a-zA-Z\d]){3})$"

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

Теги:

1 ответ

3
Лучший ответ

Я думаю, что ваша единственная проблема в том, что вы не соответствуете символам.

@"^(?=(.*\d){3})(?=(.*[a-z]){3})(?=(.*[A-Z]){3})(?=(.*[^a-zA-Z\d]){3})$"

состоит только из ваших взглядов, которые обеспечивают ваши условия. Это означает, что в основном вы нуждаетесь в условиях с lookaheads, а с другой стороны, реальный паттерн только ^$ соответствует пустой строке. Это регулярное выражение никогда не вернется.

Просто добавьте .* В конце, чтобы на самом деле совместить символы. Ваши требования покрываются взглядами.

@"^(?=(.*\d){3})(?=(.*[a-z]){3})(?=(.*[A-Z]){3})(?=(.*[^a-zA-Z\d]){3}).*$"
  • 0
    Работает только в некоторых случаях. gh6y78GH#^% подтвердит это, несмотря на наличие только двух заглавных букв, как и skfhsifcns,edche#£$444
  • 0
    @StevePettifer, нет не будет, пропущен верхний регистр.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню