给定一个电子邮件列表,格式为:

  "FirstName Last" <email@address.com>, "NewFirst NewLast" <email2@address.com>

如何将其构建为仅包含电子邮件地址的字符串数组(我不需要名称)。

有帮助吗?

解决方案

PHP 的 Mailparse 扩展 有一个 mailparse_rfc822_parse_addresses 功能 你可能想尝试一下。否则,您应该构建自己的地址解析器。

其他提示

您可以使用preg_match_all文档):

preg_match_all('/<([^>]+)>/', $s, $matches);
print_r($matches); // inspect the resulting array

所提供的所有地址被包围在< ... >没有必要explode()字符串$s


修改响应于评论,正则表达式可以改写为'/<([^@]+@[^>]+)>/'。不知道这是否是万无一失,但:)


修改#2 使用用于解析器的任何非平凡的数据(见下面的评论 - 电子邮件地址的解析是母狗)。能,但是,通过除去重复的地址可以防止一些错误。

<?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);
?>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top