gpt4 book ai didi

php - 解析 TO header 中符合 RFC 822 的地址

转载 作者:可可西里 更新时间:2023-11-01 01:08:14 24 4
gpt4 key购买 nike

我想用 preg_match_all 解析电子邮件地址列表(如 TO header 中的列表)以获取用户名(如果存在)和电子邮件。类似于 Pear 的 mailparse_rfc822_parse_addresses 或 Mail_RFC822::parseAddressList() 的东西,但在纯 PHP 中。

输入:

"DOE, John \(ACME\)" <john.doe@somewhere.com>, "DOE, Jane" <jane.doe@somewhere.com>

输出:

array(
array(
'name' => 'DOE, John (ACME)',
'email' => 'john.doe@somewhere.com'
),
array(
'name' => 'DOE, Jane',
'email' => 'jane.doe@somewhere.com'
)
)

不需要支持奇怪的E-mail格式(/[a-z0-9._%-]+@[a-z0-9.-]+.[a-z]{2,4}/i电子邮件部分没问题)。

我不能使用 explode,因为逗号可以出现在名称中。 str_getcsv 不起作用,因为我可以:

DOE, John \(ACME\) <john.doe@somewhere.com> 

作为输入。

更新:

目前,我有这个:

public static function parseAddressList($addressList)
{
$pattern = '/^(?:"?([^<"]+)"?\s)?<?([^>]+@[^>]+)>?$/';
if (preg_match($pattern, $addressList, $matches)) {
return array(
array(
'name' => stripcslashes($matches[1]),
'email' => $matches[2]
)
);
} else {
$parts = str_getcsv($addressList);
$result = array();
foreach($parts as $part) {
if (preg_match($pattern, $part, $matches)) {
$result[] = array(
'name' => stripcslashes($matches[1]),
'email' => $matches[2]
);
}
}
return $result;
}
}

但它失败了:

"DOE, \"John\"" <john.doe@somewhere.com>

我需要测试反向引用\"但我不记得该怎么做。

最佳答案

最后我做到了:

public static function parseAddressList($addressList)
{
$pattern = '/^(?:"?((?:[^"\\\\]|\\\\.)+)"?\s)?<?([a-z0-9._%-]+@[a-z0-9.-]+\\.[a-z]{2,4})>?$/i';
if (($addressList[0] != '<') and preg_match($pattern, $addressList, $matches)) {
return array(
array(
'name' => stripcslashes($matches[1]),
'email' => $matches[2]
)
);
} else {
$parts = str_getcsv($addressList);
$result = array();
foreach($parts as $part) {
if (preg_match($pattern, $part, $matches)) {
$item = array();
if ($matches[1] != '') $item['name'] = stripcslashes($matches[1]);
$item['email'] = $matches[2];
$result[] = $item;
}
}
return $result;
}
}

但我不确定它是否适用于所有情况。

关于php - 解析 TO header 中符合 RFC 822 的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6609195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com