Следующий шаблон регулярного выражения (для PHP) предназначен для проверки любого адреса электронной почты:
^[\w.-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$
В нем говорится: «сопоставляйте хотя бы одну (или более) буквы верхнего и / или нижнего регистра и / или периоды, подчеркивания и / или тире, за которыми следует один и только один символ @, за которым следует хотя бы одна (или более) буквы верхнего и / или нижнего регистра, и / или периоды, и / или символы подчеркивания, за которыми следует один и только один период, за которым следует от двух до шести верхних и / или строчных букв .
Это похоже на любой адрес электронной почты, о котором я могу думать. Тем не менее, это чувство правильного выбора, вероятно, обманчиво. Может ли кто-нибудь знающий, пожалуйста, указать на очевидную или не столь очевидную уязвимость в этом шаблоне, о котором я не знаю, что бы не выполнить проверку электронной почты так, как она предназначена?
(Чтобы предвидеть возможный ответ, я знаю, что функция filter_var () предлагает более надежное решение, но в данном случае меня интересует регулярное выражение.)
ПРИМЕЧАНИЕ. Это теоретический вопрос о PHP-образе регулярного выражения, а не о практическом вопросе о проверке электронной почты. Я просто хочу определить ограничения того, что разумно возможно с помощью регулярного выражения в этом случае.
Заранее спасибо!
Использование регулярного выражения для проверки электронной почты сложно
Попробуйте ввести следующее письмо в качестве своего регулярного выражения: ^[\w.-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$
abc@b...com
Подробнее о проверке регулярных выражений по электронной почте вы можете узнать по адресу http://www.regular-expressions.info/email.html.
Если вы делаете это для приложения, используйте проверку подлинности электронной почты, отправив электронное письмо на указанный адрес, а не используя очень сложное регулярное выражение.
Спецификация адреса электронной почты довольно гад. Есть регулярное выражение, которое может сделать полную проверку для него, но они тысячи символов. Возможно, лучше разобрать его самостоятельно, но PHP имеет встроенный валидатор для адресов электронной почты:
filter_var($email, FILTER_VALIDATE_EMAIL);
РЕДАКТИРОВАТЬ:
В ответ на ваш конкретный вопрос об адресе электронной почты, который будет терпеть неудачу, любой, у которого есть имя электронной почты в кавычках, будет связано с тем, что вы вообще не учитываете их:
"explosion-pills"@aysites.com