我为一家律师事务所提供电子邮件存档,该律师事务所从Postfix接收邮件并使用PHP脚本将消息插入数据库。这很好用但有时我用来解析From,To和Cc标题中的电子邮件地址的正则表达式不能100%准确地捕获电子邮件地址。我已经尝试了在stackoverflow上使用filter_var(),使用imap_rfc822_parse_adrlist,使用问题1028553中的正则表达式提出的其他解决方案,实际上比我的成功更少。
我希望尽量减少系统调用(我现在使用太多pregs)并提高准确性。当前函数接受标题文本(From,To或Cc字段)的输入,并返回删除括号,引号,注释等的“干净”电子邮件地址。
任何人都能提供的任何帮助都会受到赞赏,因为我很难过!
温迪
我的功能:
function return_proper ($email_string) {
if (is_array($email_string)) {
$x = "";
foreach ($email_string as $val) {
$x .= "$val,";
}
$email_string = substr($x, 0, -1);
}
$email_string = strtolower(preg_replace('/.*?([A-Za-z0-9\_\+\.\'-]+@[A-Za-z0-9\.-]+).*?/', '$1,', $email_string));
$email_string = preg_replace('/\>/', "", $email_string);
$email_string = preg_replace('/,$/', "", $email_string);
$email_string = preg_replace('/^\'/', "", $email_string);
return $email_string;
}
答案 0 :(得分:0)
function return_proper($email_string) {
if (is_array($email_string)) {
// Deal with array
foreach ($email_string as $email_string_line) {
$results[] = return_proper($email_string_line);
}
$result = implode(',', $results);
} else {
preg_match_all('/[A-Za-z0-9\_\+\.\'-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]+/', $email_string, $matches);
$result = implode(',', $matches[0]);
}
return strtolower($result);
}