与this question类似,如何解析这种格式的电子邮件地址,
"Bob Smith" <bob@company.com>, joe@company.com, "John Doe"<john@company.com>
得到这样的结果:
array(
'bob@company.com'=>'Bob Smith'
'joe@company.com'=>''
'john@company.com'=>'John Doe'
);
与this question类似,如何解析这种格式的电子邮件地址,
"Bob Smith" <bob@company.com>, joe@company.com, "John Doe"<john@company.com>
得到这样的结果:
array(
'bob@company.com'=>'Bob Smith'
'joe@company.com'=>''
'john@company.com'=>'John Doe'
);
6条答案
按热度按时间pbgvytdp1#
那么,你可以使用
mailparse_rfc822_parse_addresses()
,它就是这样做的,它是一个PECL扩展,所以使用评论中提到的Mail_RFC822::parseAddressList()
可能会更容易。zf2sa74q2#
这应该适用于几乎任何情况:
结果:
ny6fqffe3#
下面是一段完整的代码,它甚至可以验证电子邮件是否正确;)
lo8azlld4#
对于类似的任务,我使用了以下正则表达式:
https://regex101.com/r/Lpsjmr/1
PHP代码:
eit6fx6z5#
1.用逗号分隔字符串
1.如果电子邮件有效,则存储它,如果否
1.删除“〉”字符
1.按“〈”分解
1.修剪('"'和' ')的字符串
8xiog9wr6#
对于@mario's answer中的原生函数无法正确解析的输入字符串,请使用"branch resets"(
(?|...)
)和捕获组((...)
)解析分隔逗号之间的子字符串。分支重置确保(可选地发生)名称始终存储在匹配数组的
1
列中,并且电子邮件始终存储在2
列中。代码:(Demo)