Подтверждение адреса электронной почты, снова - PullRequest
2 голосов
/ 22 сентября 2009

Глядя на сообщения здесь для проверки адреса электронной почты, я выгляжу гораздо более либеральным в отношении теста на стороне клиента, который я выполняю.

Самое близкое, что я видел до сих пор:

^([\w-\.]+)@((\[[0–9]{1,3}\.[0–9]{1,3}\.[0–9]{1,3}\.)|(([\w-]+\.)+))
([a-zA-Z]{2,4}|[0–9]{1,3})(\]?)$

Это не будет соответствовать this#strnage@foo.com, который в соответствии с RFC действителен

  • Прописные и строчные буквы английского алфавита (a-z, A-Z)
  • Цифры от 0 до 9
  • Персонажи! # $% & '* + - / =? ^ _ `{| } ~
  • Персонаж. (точка, точка, точка) при условии, что это не первый или последний символ, а также при условии, что он не появляется два или более раз подряд.

Я хочу довольно простое совпадение:

  • Не начинается с.
  • Любой символ, допустимый до @
  • Любой символ, разрешенный после @
  • Нет подряд. или @ разрешено
  • Часть после последней. (tld) должно быть [a-z0-9-]

Я буду использовать \ i, чтобы сделать поиск нечувствительным к регистру. Последовательные символы - то, где я зацикливаюсь.

Ответы [ 7 ]

4 голосов
/ 22 сентября 2009

Если вы хотите сравнить с официальным стандартом, вы можете использовать

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

Таким образом, даже при соблюдении официальных стандартов все еще есть компромиссы. Не копируйте вслепую регулярные выражения из онлайн-библиотек или дискуссионных форумов. Всегда проверяйте их на своих данных и в своих собственных приложениях.

1 голос
/ 22 сентября 2009
/^[^.].*@(?:[-a-z0-9]+\.)+[-a-z0-9]+$/
0 голосов
/ 08 августа 2013

Следующее время было полезным для меня довольно давно.

function validateEmail(email) { 
    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(email);
} 
0 голосов
/ 10 декабря 2012

Регулярное выражение, очень совместимое с RFC822, можно найти здесь

0 голосов
/ 03 апреля 2012

Идеальное регулярное выражение проверки, вероятно, трудно сопоставить, но я использовал это довольно давно:

/^([\w-\.\+])+\@([\w-]+\.)+([\w]{2,6})+$/

Только недавно изменил его, чтобы соответствовать 6-символьным TLD.

0 голосов
/ 22 сентября 2009

Это зависит от того, кто использует ваши приложения. Для внутренних приложений часто имя пользователя является действительным адресом электронной почты. Большая часть спецификации электронной почты RFC-822 описывает дополнительные поля, которые могут присутствовать в адресе электронной почты. Например, Allen Town, это довольно стандартный адрес электронной почты, который вы можете ввести в свой любимый почтовый клиент. Однако для приложения вам может потребоваться добавить имя к адресу электронной почты при отправке электронной почты, и вы не хотите, чтобы оно было частью адреса пользователя.

Самый либеральный способ проверки адреса электронной почты - просто попытаться отправить письмо на любой адрес, указанный пользователем. Если они получают электронное письмо и могут подтвердить его, то это действительный адрес.

0 голосов
/ 22 сентября 2009
function validator(email) {
   var bademail = false;
   bademail = (email.indexOf(".") == 0) ? true : bademail;
   bademail = (email.indexOf("..") != -1) ? true : bademail;
   bademail = (email.indexOf("@@") != -1) ? true : bademail;
   if(!bademail) {
      var tldTest = new RegExp("[a-z0-9-]");
      var lastperiodpos = email.lastIndexOf(".");
      var tldstr = email.slice(lastperiodpos + 1);
      bademail = (!(tldTest.test(tldstr))) ? true : bademail;
   } 
   return bademail;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...