开发者

Regex to parse Email Form "To" field

开发者 https://www.devze.com 2023-01-18 23:31 出处:网络
If there is one that could handle this, what would be the correct regex pattern to extract email addresses from a string coming from an email form \"To\" line, that allows the addresses to be delimite

If there is one that could handle this, what would be the correct regex pattern to extract email addresses from a string coming from an email form "To" line, that allows the addresses to be delimited by commas ",", semicolons ";", spaces, or any combination of the three. The regex also has to be able to ignore "noise" text, such as if an address is enclosed in "<" and ">" characters, or has an actual name next to the email address. For example, from this string t开发者_StackOverflow中文版hat was in the To field:

"Joe Smith" <jsmith@example.com>, kjones@aol.com; someoneelse@nowhere.com mjane@gmail.com

The pattern should be able to return the following matches of: jsmith@example, kjones@aol.com, someoneelse@nowhere.com, mjane@gmail.com

I am using PHP, so if this can't be done in single regex then im definitely open to other PHP-based solutions.

Thanks


Try

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

(courtesy of RegexBuddy) as in

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

Note the /i modifier to make it case-insensitive.

See also this question for an explanation of the drawbacks of regexes for finding e-mail addresses in a string.


I got the regex from http://www.webcheatsheet.com/php/regular_expressions.php, and only modified it slightly.

$string = '"Joe Smith" <jsmith@example.com>, kjones@aol.com; someoneelse@nowhere.com mjane@gmail.com';
$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];

Now $emails will have an array with all your email addresses.


While your question was specific to RegEx and Tim gave you a great answer, for people looking for a simple solution, look at mailparse_rfc822_parse_addresses on page http://php.net/manual/en/function.mailparse-rfc822-parse-addresses.php

Note this is not a standard PHP function and requires installing the extension. Economy hosting solutions may not allow you to install the PECL extension.

0

精彩评论

暂无评论...
验证码 换一张
取 消