список адресов электронной почты, которые можно использовать для проверки сценария проверки JavaScript - PullRequest
17 голосов
/ 18 ноября 2008

У кого-нибудь есть список адресов электронной почты, которые я могу использовать для проверки сценария проверки моего JS-адреса? Я ищу настолько полный список, насколько это разумно, чтобы проверить наиболее распространенные крайние случаи, если не все случаи.

Ответы [ 3 ]

24 голосов
/ 18 ноября 2008

Примеры действительны в соответствии с RFC2822

  • me@example.com
  • a.nonymous@example.com
  • name+tag@example.com
  • name \ @ tag @ example.com - это действительный адрес электронной почты, содержащий два символа @.
  • пробелы \ are \ allow@example.com
  • "пробелы могут быть указаны" @ 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
  • me.example@com
  • меня \ @ example.com

От: http://en.wikibooks.org/wiki/JavaScript/Best_Practices

9 голосов
/ 22 февраля 2009

Я сейчас сопоставил тестовые наборы от Кэла Хендерсона, Дейва Чайлда, Фила Хаака, Дуга Ловелла и RFC 3696. 164 тестовых адреса во всех .

Я провел все эти тесты со всеми валидаторами, которые смог найти. Сравнение здесь: http://www.dominicsayers.com/isemail

Я постараюсь обновлять эту страницу по мере того, как люди улучшат свои валидаторы. Спасибо Кэлу, Дэйву и Филу за помощь и сотрудничество в составлении этих тестов и конструктивную критику моего собственного валидатора .

Люди должны знать об ошибках против RFC 3696 в частности. Три из канонических примеров на самом деле являются недействительными адресами. Максимальная длина адреса составляет 254 или 256 символов, , а не 320.

0 голосов
/ 18 ноября 2008

Доменная часть (после последней @) представляет собой последовательность строковых меток, разделенных точкой.

Каждая метка представляет собой строку от 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...