Есть ли у кого-нибудь список адресов электронной почты, которые я могу использовать для проверки моей проверки адреса JS script? Я ищу как полный список, так как разумно тестировать наиболее распространенные случаи кросс, если не во всех случаях.
Список адресов электронной почты, которые могут быть использованы для проверки проверки javascript script
Ответ 1
Примеры действительны в соответствии с RFC2822
- [email protected]
- [email protected]
- [email protected]
- name\@tag @example.com - это действительный адрес электронной почты, содержащий два символа @.
- пробелы \are\[email protected]
- "могут быть указаны" @example.com !
- # $% & '* + -/= ^ _ `{|} ~ @[1.0.0.127].? !
- # $% & '* + -/= ^ _ `{|} ~ @[IPv6: 0123: 4567: 89AB: CDEF: 0123: 4567: 89AB: CDEF].?
- me (это комментарий) @example.com - комментарии не приветствуются, но не запрещены RFC2822.
Примеры недействительны в соответствии с RFC2822s
- мне @
- @example.com
- меня. @Example.com
- .me @example.com
- мне @example..com
- [email protected]
- мне \@example.com
Ответ 2
Теперь я собрал тестовые примеры от Cal Henderson, Dave Child, Phil Haack, Doug Lovell и RFC 3696. 164 тестовых адреса во всех.
Я провел все эти тесты со всеми проверками, которые я смог найти. Сравнение здесь: http://www.dominicsayers.com/isemail
Я постараюсь сохранить эту страницу в актуальном состоянии, так как люди повышают эффективность своих валидаторов. Благодаря Cal, Dave и Phil за помощь и сотрудничество в компиляции этих тестов и конструктивной критике моего собственного валидатора.
Люди должны знать об ошибках в отношении RFC 3696. Три из канонических примеров на самом деле являются неверными адресами. И максимальная длина адреса составляет 254 или 256 символов, не 320.
Ответ 3
Доменная часть (после последнего @) представляет собой ряд строковых меток, разделенных точкой.
Каждая метка представляет собой строку от 1 до 63 октетов, состоящую из A-Z, a-z 0-9 или дефиса (-)
Максимальный размер домена - 255 октетов.
Чтобы быть совместимым с arpanet, каждая метка должна начинаться с буквы и заканчиваться буквой или цифрой, но некоторые TLD: s теперь позволяет использовать весь числовой домен, например 0.nu
Обратите внимание, что TLD разрешено иметь 63 октета. Очень много скриптов ошибочно ограничивают его до 2-3 октетов, что делает domain.name недопустимым.
Пример
abcdefghijklmnopqrstuvwxyz.ABCDEFGHIJKLMNOPQRSTUVWXYZ # $% & '+ -/= ^ `{|}[email protected]9.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 почти все возможно:
- [email protected]
- idna_in_clear (?) _ @Текст 例子. 测试.مثال.آزمایشی
См. также:
https://stackoverflow.com/info/3232/how-far-should-one-take-e-mail-address-validation
http://www.leshazlewood.com/?p=5
Обновление: Бобинс предложил проверить точку в доменном имени.
Резюме: проверяйте только @и точку в домене, а затем отправляйте электронное письмо с подтверждением.
Вот пример, который тестирует @и dot:
- Должен быть хотя бы один @
- В локальной части должно быть не менее одного char (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;
}