На самом деле, Рекомендация W3C, которую вы цитировали , предлагает регулярное выражение в качестве эквивалента для того, что они представляют как ABNF, который определяет действительный адрес электронной почты:
/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
Но это регулярное выражение соответствует недействительным адресам электронной почты, таким как ".any..address. @ 123" (проверено с https://regex101.com/).
Это регулярное выражение принимает (все недействительны в адресе электронной почты, согласно Wikipedia ):
- "" (точка) в начале локальной части
- "" (точка) в конце локальной части
- несколько последовательных "." (точка) в локальной части
- только номера в доменной части
и отклоняет (действует согласно Википедии):
- Юникод символы
- некоторые специальные символы, разделенные кавычками (
"
)
Обратите внимание, что W3C заявляет, что представленная ими спецификация является преднамеренным нарушением из RFC 5322 , поэтому у них есть «оправдание» для исключения действительных случаев, но, ИМХО, это не так причина для принятия неверных адресов.
Если вы не будете беспокоиться об этих случаях исключения, вы можете использовать регулярное выражение, которое предлагает W3C. В противном случае вы должны использовать регулярное выражение для рассмотрения дел, которые вы хотите обработать.