2009-12-09 2 views
8

Я знаю, что здесь много вопросов о проверке подлинности электронной почты и конкретных RegEx. Я хотел бы знать, что лучше всего подходит для проверки электронной почты в отношении наличия трюка [email protected] (details here). Мой текущий RegExp для проверки JavaScript заключается в следующем, но он не поддерживает дополнительные + в ручке:Рекомендации по проверке адресов электронной почты (включая + в адресах gmail)

/^([a-zA-Z0-9_.-])[email protected](([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/ 

Существуют ли какие-либо другие услуги, которые поддерживают дополнительные +? Должен ли я разрешать + в адресе, или я должен изменить RegEx, чтобы разрешить его только для электронной почты с gmail.com или googlemail.com в качестве домена? Если да, то что изменит RegEx?

UPDATE: Спасибо всем за указание на то, что + действует согласно спецификации. Я этого не знал и теперь делаю в будущем. Для тех из вас, кто сказал, что его плохо даже использовать RegEx для его проверки, моя причина полностью основана на творческом дизайне, который я создаю. Дизайн нашего клиента помещает зеленую метку или красный X рядом с адресом электронной почты, на котором он размывается. Этот значок указывает, действительно ли он действительный адрес электронной почты, поэтому я должен использовать JS для его проверки.

+2

Это вряд ли трюк, когда он является частью стандарта электронной почты. – tloach

+8

Не используйте RegEx для проверки электронной почты, кроме обнаружения явных ошибок. Просто отправьте пользователю электронное сообщение с ссылкой «активация». Для проверки электронной почты нет регулярных выражений foolproog. По крайней мере, ни один из них не подходит к листу бумаги формата А4, даже если он напечатан в крошечном, но читаемом шрифте ;-) (http://www.regular-expressions.info/email.html) – Duroth

+0

@tloach. Я считаю это хитростью если не все службы электронной почты поддерживают его таким образом, что отправляют электронное письмо в первую часть дескриптора перед '+' независимо от части после '+' - я даже не подозревал, что это часть стандарта. –

ответ

11

+ является valid character по электронной почте. Не имеет значения, является ли домен не gmail.com или googlemail.com.

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

/^([a-zA-Z0-9_.-\+])[email protected](([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/ 

в качестве примера того, как это регулярное выражение не проверяет против спецификации: сообщения электронной почты [email protected] действует в соответствии с ним.

+0

Мне было бы интересно узнать, что лучше всего подходит для проверки адресов электронной почты. – Zoidberg

+0

Я полагаю, он имеет в виду, что лучше использовать проверенную, проверенную библиотеку, а не перематывать собственное регулярное выражение. Java-пример такой библиотеки - Apache Commons. –

+1

См. Http://stackoverflow.com/questions/3232/how-far-should-one-take-e-mail-address-validation –

5

Если вам необходимо проверить электронные письма с помощью регулярного выражения, то read the standard или не менее this article.

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

(?:[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

Из статьи, которую вы указали на: «Не слепо копировать регулярные выражения из онлайновых библиотек или дискуссионных форумов». Кроме того, это регулярное выражение _still_ не полностью проверяет спецификацию. –

+0

@ Аарон Спасибо, это очень страшно. Я буду притворяться, что раньше этого не видел - особенно закодированные персонажи! –

3

Я бы, как правило, идут с чем-то вдоль линий /[email protected] . + \ .. +/для проверки простых ошибок. Затем я отправил электронное письмо на адрес, чтобы убедиться, что оно действительно существует, поскольку большинство опечаток все равно будут приводить к синтаксически допустимым адресам электронной почты.

2

Спецификации позволяют некоторым действительно сумасшедшим уродливым адресам электронной почты. Меня часто очень раздражают сайты, даже жалующиеся на совершенно нормальные, действительные адреса электронной почты, поэтому, пожалуйста, старайтесь не отклонять действительные адреса электронной почты. Лучше принимать некоторые незаконные адреса, чем отклонять законные.

Как и другие, я предложил бы использовать простое регулярное выражение, например /[email protected]+/, а затем отправил электронное письмо с подтверждением. Если это достаточно важно для проверки, достаточно проверить, потому что юридический адрес электронной почты может принадлежать кому-то другому, кроме вашего посетителя. Или содержать непреднамеренную, но фатальную опечатку.

Редактировать: удалена точка из части домена регулярного выражения, поскольку [email protected] по-прежнему действительный адрес электронной почты. Поэтому даже моя упрощенная проверка отклонила действительные адреса.Есть ли недостаток вообще, чтобы просто принять все, что содержит @ с чем-то впереди и за ним?

+2

Нет причин, по которым правительство Тонги не может добавить запись 'MX' в ccTLD' to', делая адрес, такой как 'mcv @ to' фактическим рабочим адресом электронной почты. У них уже есть веб-сервер, работающий на 'http: // to' (для службы сокращений URI), поэтому это, безусловно, нереально. –

Смежные вопросы