Это e-mail-regex исключает действительные адреса?

Я попытался создать регулярное выражение, которое перехватывает все адреса, допустимые для RFC, но это нормально, если некоторые ложные срабатывания проходят (хотя, надеюсь, не так много). Это то, что я дошел до сих пор:

/^\b\S+@\S+\.[^\s@]{2,}\b$/

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

5 ответов

Решение

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

test(Oh (noes, an @) "sign")@(Here comes the domain)domain.com(TLD is com!!)

Даже без комментариев локальная часть может содержать строки в кавычках, которые могут содержать пробелы. Лучший подход, который я нашел, это: искать @, Это обязательно. Так что я бы использовал

/.+@.+/

Проверьте этот пост:

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

Есть также этот:

http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html

Ничего подобного регулярному выражению 6000+ символов!

"foo bar"@example.com

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

name@[1.2.3.4]

не совпадает, но действует Хороший список действительных / недействительных почтовых адресов для тестирования можно найти здесь.

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

Другие вопросы по тегам