Регулярное выражение для анализа формы электронной почты "Кому" поле


Если есть такой, который мог бы справиться с этим, каким был бы правильный шаблон регулярного выражения для извлечения адресов электронной почты из строки, поступающей из формы электронной почты "В", которая позволяет разделять адреса запятыми ",", точками с запятой";", пробелами или любой комбинацией из трех. Регулярное выражение также должно иметь возможность игнорировать "шумовой" текст, например, если адрес заключен в символы "<" и ">" или имеет фактическое имя рядом с адресом электронной почты. Например, из этой строки, которая была в поле:

"Joe Smith" <[email protected]>, [email protected]; [email protected] [email protected]

Шаблон должен быть способен возвращать следующие совпадения: jsmith@пример, [email protected], [email protected], [email protected]

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

Спасибо

Author: Bill Dami, 2010-10-08

3 answers

Попробуйте

\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}\b

(любезно предоставлено RegexBuddy), как в

preg_match_all('/\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}\b/i', $subject, $result, PREG_PATTERN_ORDER);
$result = $result[0];

Обратите внимание на модификатор /i, чтобы сделать его нечувствительным к регистру.

Смотрите также этот вопрос для объяснения недостатков регулярных выражений для поиска адресов электронной почты в строке.

 6
Author: Tim Pietzcker, 2017-05-23 10:30:09

Я получил регулярное выражение от http://www.webcheatsheet.com/php/regular_expressions.php , и лишь слегка изменил его.

$string = '"Joe Smith" <[email protected]>, [email protected]; [email protected] [email protected]';
$email_regex = "/[^0-9< ][A-z0-9_]+([.][A-z0-9_]+)*@[A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}/";
preg_match_all($email_regex, $string, $matches);
$emails = $matches[0];

Теперь у $email будет массив со всеми вашими адресами электронной почты.

 1
Author: cambraca, 2010-10-07 21:16:31

Хотя ваш вопрос был специфичен для регулярных выражений, и Тим дал вам отличный ответ, для людей, ищущих простое решение, посмотрите на mailparse_rfc822_parse_addresses на странице http://php.net/manual/en/function.mailparse-rfc822-parse-addresses.php

Обратите внимание, что это не стандартная функция PHP и требует установки расширения. Решения для хостинга эконом-класса могут не позволить вам установить расширение PECL.

 1
Author: Fraser Marlow, 2015-07-17 17:06:43