Как и в этом вопросе , как я могу анализировать адреса электронной почты, которые находятся в этом формате,
"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' );
Ну, вы можете использовать mailparse_rfc822_parse_addresses()
, что делает именно это. Это расширение PECL, поэтому было бы проще использовать Mail_RFC822::parseAddressList()
как указано в комментариях.
Это должно работать примерно с чем угодно:
$str = '"Bob Smith" <bob@company.com>, joe@company.com, "John Doe"<john@company.com>, Billy Doe<billy@company.com>'; $emails = array(); if(preg_match_all('/\s*"?([^><,"]+)"?\s*((?:<[^><,]+>)?)\s*/', $str, $matches, PREG_SET_ORDER) > 0) { foreach($matches as $m) { if(! empty($m[2])) { $emails[trim($m[2], '<>')] = $m[1]; } else { $emails[$m[1]] = ''; } } } print_r($emails);
Результат:
Array ( [bob@company.com] => Bob Smith [joe@company.com] => [john@company.com] => John Doe [billy@company.com] => Billy Doe )
Это полностью работающий фрагмент кода, который даже проверяет правильность электронной почты или нет;)
<?php $mails = '"Bob Smith" <bob@company.com>, joe@company.com, "John Doe"<john@company.com>'; $records = explode(",",$mails); foreach($records as $r){ preg_match("#\"([\w\s]+)\"#",$r,$matches_1); $name = $matches_1[1]; preg_match("/[^0-9<][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][Az]{2,4}/i",$r,$matches_2); $email = $matches_2[0]; echo "Name: $name <br /> Email: $email <br />"; } ?>
$ emails = explode (",", $ your_email_list);
Разверните строку запятой
Это недопустимое решение, потому что запятая может быть частью имени: «LastName, FirstName»