Intereting Posts
Зачем считать (false) return 1? Неустранимая ошибка: вызов неопределенной функции: imagecreate () Magento: невозможно переопределить правило продаж Шифровать с помощью PHP Mcrypt и расшифровывать с помощью MySQL aes_decrypt? Почему mysqli_real_escape_string имеет объект соединения в качестве первого параметра безопасное место для хранения значений php для msql_connect? выполнение связанных с датой времени операций в PHP javascript run xmlhttp php script 404 не найден Санитария при вводе пользователя с использованием белого списка «Вертикальное» соответствие регулярных выражений в ASCII «изображении» Является ли mysqli :: multi_query более эффективным, чем несколько отдельных запросов? Отображение результатов поиска автозаполнения Laravel Глобальная переменная внутри конструктора с PHP При назначении массива PHP массиву JS каждый алфавит значений массива делится Вопросы проектирования для интернационализации

Разбирайте адреса электронной почты с помощью PHP?

Как и в этом вопросе , как я могу анализировать адреса электронной почты, которые находятся в этом формате,

"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 ) 
  1. Разверните строку запятой
  2. Если действительный адрес электронной почты затем сохранит его, если НЕТ
    1. rtrim символ '>'
    2. взорваться '<'
    3. обрезать строку для ('' 'и' ')

Это полностью работающий фрагмент кода, который даже проверяет правильность электронной почты или нет;)

 <?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»