Я использую многошаговую проверку. Поскольку не существует идеального способа проверки адреса электронной почты, идеальный не может быть получен, но, по крайней мере, вы можете уведомить пользователя, что он / она что-то делает неправильно - вот мой подход
1) Сначала я проверяю с помощью базового регулярного выражения, которое просто проверяет, содержит ли электронная почта ровно один знак @ и не является ли оно пустым до или после этого знака. например /^[^@\s]+@[^@\s]+$/
2a) если первый валидатор не прошел (а для большинства адресов он должен хотя и не идеален), то предупредите пользователя, что электронная почта недействительна, и не позволяйте ему продолжить ввод
2b) если он пройдет, то проверьте его на соответствие более строгому регулярному выражению - что может запретить действительные электронные письма. Если это не проходит, пользователь предупреждается о возможной ошибке, но может продолжить. В отличие от шага (1), где пользователю не разрешено продолжать, потому что это очевидная ошибка.
То есть, другими словами, первая либеральная проверка состоит в том, чтобы просто убрать очевидные ошибки, и она рассматривается как «ошибка». Люди вводят пустой адрес, адрес без знака @ и так далее. Это следует рассматривать как ошибку. Второй является более строгим, но рассматривается как «предупреждение», и пользователь может продолжить ввод, но предупрежден, по крайней мере, проверить, введен ли он / она действительной записью. Ключевым моментом здесь является подход «ошибка / предупреждение» - ошибка, которая в 99,99% случаев не может быть действительной электронной почтой.
Конечно, вы можете изменить то, что делает первое регулярное выражение более либеральным, а второе - более строгим.
В зависимости от того, что вам нужно, вышеуказанный подход может работать для вас.