Доменная часть (после последней @) представляет собой последовательность строковых меток, разделенных точкой.
Каждая метка представляет собой строку от 1 до 63 октетов, состоящую из A-Z, a-z 0-9 или дефиса (-)
Максимальный размер домена составляет 255 октетов.
Чтобы быть совместимым с arpanet, каждая метка должна начинаться с буквы и заканчиваться буквой или цифрой, но некоторые TLD теперь могут использовать весь числовой домен, например 0.nu
Обратите внимание, что TLD может быть 63 октета. Очень многие скрипы ошибочно ограничивают его до 2-3 октетов, делая домен.имя недействительным.
Пример
abcdefghijklmnopqrstuvwxyz.ABCDEFGHIJKLMNOPQRSTUVWXYZ.!#$%&'+-/=.?^`{|}~@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-0123456789.abcdefghijklmnopqrstu.vwxyzABCDEFGHIJKLMNOP.QRSTUVWXYZ0.1.2.3.4.5.6.7.8.9.az.AZ.0 -9.a0.b1.c2.d3.e4.f5.g6.h7.i8.j9.K0.L1.M2.N3.O.domain.name
(и нет, он не зарегистрирован)
Обновление:
С IDNA возможно почти все :
- punnycode@XN--0ZWM56D.XN--HGBK6AJ7F53BBA
- idna_in_clear (?) _ Текст @ 例子. 测试 .مثال.آزمایشی
Смотри также:
https://stackoverflow.com/questions/3232/how-far-should-one-take-e-mail-address-validation
http://www.leshazlewood.com/?p=5
Обновление: Bobince предложил проверить наличие точки в доменном имени.
Сводка : проверять только @ и точку в доменной части, а затем отправлять подтверждение по электронной почте.
Вот пример теста для @ и точки:
- Должен быть хотя бы один @
- В локальной части должен быть хотя бы один символ (pos> 0)
- В доменной части должна быть хотя бы одна точка
- Доменная часть должна содержать не менее 4 символов
Вот простой:
function isEmail(address) {
var pos = address.lastIndexOf("@");
return pos > 0 && (address.lastIndexOf(".") > pos) && (address.length - pos > 4);
}
Или функция, которая возвращает локальную и доменную часть в объекте (если вы хотите обработать его еще дальше, например, преобразовать его в punycode)
function isEmail(address) {
var pos = address.lastIndexOf("@");
return pos > 0 && (address.lastIndexOf(".") > pos) && (address.length - pos > 4) ?
{
local:address.substr(0,pos < 0 ? 0 : pos),
domain:address.substr(pos+1)
}: false;
}