Полное имя с действующим адресом электронной почты

$string ='"Test User" <test@test.com>,"Another" <another@test.com>,"aeer" <whateveryourmail@gmail.com>'; 

Я преуспеваю в том, чтобы разделить эту пару имен и адресов электронной почты с этим кодом

 preg_match_all('!"(.*?)"\s+<\s*(.*?)\s*>!', $string, $matches); 

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

Вы можете использовать доступные доступные парсеры почтовых адресов, например:

  • mailparse_rfc822_parse_addresses()
  • Mail_RFC822::parseAddressList()

Необязательно фильтруйте выход через filter_var() (или одну из своих перестановок, предназначенных для массивов) с помощью FILTER_VALIDATE_EMAIL .

Проверка адреса электронной почты может быть выполнена двумя способами: проверьте наличие @ и a. и предположим, что это действительно. Пользователи знают свой адрес электронной почты, это не наш бизнес, если они ошибаются. Если вы хотите быть уверенным, что создали хороший почтовый адрес, то для проверки правильности используется только одно правильное регулярное выражение: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html