Мы все знаем, что проверка адреса электронной почты — это щекотливая тема, существует так много мнений о том, как лучше всего справиться с этим без кодирования для всего RFC. Но с 2009 года все стало еще сложнее, и я еще не видел, чтобы кто-то занимался проблемой IDN.
Вот что я использовал:
preg_match(/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,6}\z/i)
Что будет работать для большинства адресов электронной почты, но что, если мне нужно сопоставить адрес электронной почты не на латинице? например: bob@china.中國 или bob@russia.рф
Полный список смотрите здесь. (Обратите внимание на все нелатинские доменные расширения внизу списка.)
Информацию на эту тему можно найти здесь и я думаю, что они говорят, что эти новые символы будут просто читаться как «.xn--fiqz9s» и «.xn--p1ai» на машинном уровне, но я не уверен на 100%.
Если это так, значит ли это, что единственное изменение, которое мне нужно рассмотреть, заключается в следующем? (Для доменных расширений, таких как .travelersinsurance и .sandvikcoromant)
preg_match(/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,20}\z/i)
ВНИМАНИЕ. Это не связано с обсуждением на этой странице Использование регулярное выражение для проверки адреса электронной почты