Нужна группа соответствия RegExpr из 8, содержащая 2+ прописных, 2+ строчных и 1+ число

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

  • Существует группа ровно из 8 буквенно-цифровых символов, которые должны быть сопоставлены.
  • Он должен содержать 2 или более заглавных буквы;
  • И он должен содержать 2 или более строчных буквы;
  • И он должен содержать 1 или более цифр.

Пока все, что мне удалось придумать, это:

(?i)[A-Za-z0-9]{8}

Мой код действительно соответствует смешанной группе регистров из 8, но не использует верхний или нижний регистр и не указывает, сколько раз должен встречаться каждый тип. Итак, я сочетаю это с другими обязательными элементами, которые всегда присутствуют в рассматриваемых сообщениях.

Вот пример шаблона, который я пытаюсь обнаружить:

WbNDSk9e

Это часть спам-адреса. Другие группы, которые я видел, следуют той же схеме, по крайней мере, по 2 буквы UC и LC и 1 или более цифр, и всегда имеют ровно 8 символов. Других персонажей или вариаций я пока не видел.

Насколько мне известно, единственный переключатель, который я могу использовать, — это включить чувствительность к регистру с помощью (?i). Некоторые другие переключатели, которые я видел в некоторых ответах, не работают в программе, которую я использую. Я требую слишком многого от однострочного правила RegExpr?

В настоящее время я использую RegEx Match для проверки своих правил, и моя антиспамовая программа использует тот же движок.


person Bob Feinberg    schedule 26.05.2012    source источник


Ответы (1)


^(?=.*?[A-Z].*?[A-Z])(?=.*?[a-z].*?[a-z])(?=.*?\d).{8}$

Сломанный:

(?=.*?[A-Z].*?[A-Z]) заставляет использовать как минимум 2 буквы в верхнем регистре.

(?=.*?[a-z].*?[a-z]) заставляет использовать как минимум 2 буквы нижнего регистра.

(?=.*?\d) требует как минимум 1 цифру.

Каретка ^ ... $ и доллар заставляют соответствовать всей строке.

Вам не нужен флаг (?i), потому что это сделает его нечувствительным к регистру.

person agent-j    schedule 26.05.2012