Вы не должны сопоставлять домены верхнего уровня с [A-Z]{2,4}
:
А как насчет .museum
или .travel
? А как насчет доменов IDNA, таких как .xn--0zwm56d
или .xn--11b5bs3a9aj6g
?
Кроме того, вполне допустимо иметь адрес электронной почты, такой как "John Doe"@example.org
.
По моему мнению, все, что вы должны проверить на стороне клиента, это если адрес содержит @
и если после него есть хотя бы один .
. На стороне сервера вы можете проверить, существует ли сервер (вы можете даже попытаться подключиться к соответствующему порту SMTP) или просто отправить письмо с подтверждением.
Все остальное подвержено ошибкам, так как фактическое регулярное выражение для проверки действительных адресов электронной почты выглядит так .
Также этот
return (regex.test(field)) ? true : false;
является серьезным WTF - test()
уже возвращает логическое значение!
Если вы хотите разрешить разные разделители, используйте регулярное выражение вместо строки для разбиения, например
value.split(/,|;/)