Регулярное выражение PHP соответствует 4 цифрам и 2 буквам в случайном порядке

#php #regex

#php #регулярное выражение

Вопрос:

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

Пример:

 a1234B
17AF45
aR1307
  

Будем признательны за любой совет.
Спасибо.

Ответ №1:

Методом грубой силы для этого может быть просто использование двух положительных прогнозов:

 ^(?=.*[A-Za-z].*[A-Za-z])(?=.*d.*d.*d.*d).{6}$
  

Это соответствовало бы ровно двум буквам, строчным или прописным, и четырем цифрам, в общей сложности шести символам.

ДЕМОНСТРАЦИЯ

Для более глубокого объяснения рассмотрим первый пример:

 ^(?=.*[A-Za-z].*[A-Za-z])
  

Это говорит о том, чтобы утверждать (но не совпадать) с начала строки, что две буквы встречаются в любом месте строки. Предполагая, что это верно, тогда механизм регулярных выражений выполнит следующий предварительный просмотр, который проверяет наличие четырех чисел. Если это также верно, то все, что нужно, это сопоставить любые 6 символов. Эти совпадающие символы должны содержать только буквы и цифры из-за предустановок.

Комментарии:

1. Кроме того, возможно установить флаг нечувствительности к регистру в конце регулярного выражения и преобразовать регулярное выражение следующим образом: /^(?=.*[a-z].*[a-z])(?=.*d.*d.*d.*d).{6}$/i . Это работает так же, как указано выше.