Следующий шаблон регулярного выражения (для PHP) предназначен для проверки любого адреса электронной почты:
^[\w.-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$
В нем говорится: «соответствуйте по крайней мере одной (или более) буквам верхнего и/или нижнего регистра, и/или точкам, знакам подчеркивания и/или тире, за которыми следует один и только один @ , за которым следует не менее одной (или нескольких) букв верхнего и/или нижнего регистра, и/или точек, и/или знаков подчеркивания, за которыми следует одна и только одна точка , за которым следуют от двух до шести букв верхнего и/или нижнего регистра.
Кажется, это соответствует любому адресу электронной почты, который я могу придумать. Тем не менее, это ощущение того, что все сделано правильно, вероятно, обманчиво. Может ли кто-нибудь знающий указать на очевидную или не столь очевидную уязвимость в этом шаблоне, о которой я не знаю, из-за которой он не выполняет проверку электронной почты так, как это должно быть?
(Чтобы предвидеть возможный ответ, я знаю, что функция filter_var() предлагает более надежное решение, но в данном случае меня особенно интересует регулярное выражение.)
ПРИМЕЧАНИЕ. это теоретический вопрос о регулярном выражении PHP, а НЕ практический вопрос о проверке электронных писем. Я просто хочу определить ограничения того, что разумно возможно с регулярным выражением в этом случае.
Заранее спасибо!
+
). Вы уже видели регулярное выражение, совместимое с RFC, не так ли? Также см. этот вопрос - person galymzhan   schedule 14.02.2013