给出一个电子邮件列表,格式化:
"FirstName Last" <email@address.com>, "NewFirst NewLast" <email2@address.com>
如何将其构建为仅包含电子邮件地址的字符串数组(我不需要名称)。
答案 0 :(得分:3)
PHP’s Mailparse extension有mailparse_rfc822_parse_addresses
function您可能想要尝试。否则你应该建立自己的地址解析器。
答案 1 :(得分:2)
您可以使用preg_match_all
(docs):
preg_match_all('/<([^>]+)>/', $s, $matches);
print_r($matches); // inspect the resulting array
如果所有地址都包含在< ... >
中,则无需explode()
字符串$s
。
编辑在回复评论时,正则表达式可以重写为'/<([^@]+@[^>]+)>/'
。但不确定这是否是故障安全的:)
编辑#2 使用任何非平凡数据的解析器(请参阅下面的评论 - 电子邮件地址解析是一个婊子)。但是,可以通过删除重复的地址来防止某些错误。
答案 2 :(得分:1)
<?php
$s = "\"FirstName Last\" <email@address.com>, \"NewFirst NewLast\" <email2@address.com>";
$emails = array();
foreach (split(",", $s) as $full)
{
preg_match("/.*<([^>]+)/", $full, $email);
$emails[] = $email[1];
}
print_r($emails);
?>