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

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

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

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


person neo    schedule 18.05.2010    source источник
comment
Если вам действительно нужно регулярное выражение, которое не отклоняет действительные адреса, используйте это: /.+/   -  person Bart Kiers    schedule 18.05.2010
comment
Я был уверен, что этот ответ придет...   -  person neo    schedule 18.05.2010


Ответы (5)


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

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

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

/.+@.+/
person Jens    schedule 18.05.2010

Посмотрите этот пост:

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

Есть еще такой:

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

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

person Scott    schedule 18.05.2010
comment
Он не требует, чтобы регулярное выражение соответствовало всем и только всем действительным адресам электронной почты. - person Jens; 18.05.2010

"foo bar"@example.com

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

person Joey    schedule 18.05.2010

name@[1.2.3.4]

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

person Tim Pietzcker    schedule 18.05.2010

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

person Rob    schedule 18.05.2010
comment
Я сомневаюсь, что проблема заключалась в том, чтобы попробовать RE, а скорее найти примеры, в которых он не соответствует... - person Joey; 18.05.2010