Question

Compte tenu de la liste des e-mails, formated:

  "FirstName Last" <email@address.com>, "NewFirst NewLast" <email2@address.com>

Comment puis-je construire ce dans un tableau de chaînes d'adresses e-mail uniquement (je ne ai pas besoin les noms).

Était-ce utile?

La solution

l'extension Mailparse PHP a fonction mailparse_rfc822_parse_addresses vous pouvez essayer. Sinon, vous devez construire votre propre analyseur d'adresse.

Autres conseils

Vous pouvez utiliser preg_match_all ( docs ):

preg_match_all('/<([^>]+)>/', $s, $matches);
print_r($matches); // inspect the resulting array

A condition que toutes les adresses sont enfermés dans < ... > il n'y a pas besoin de explode() la chaîne $s.


EDIT En réponse aux commentaires, l'expression rationnelle pourrait être réécrite comme '/<([^@]+@[^>]+)>/'. Je ne sais pas si cela est fail-safe, si:)


EDIT # 2 Utiliser un analyseur pour tous données non trivial (voir les commentaires ci-dessous - l'analyse syntaxique d'adresse e-mail est une chienne). Cependant, certaines erreurs pourraient être évitées en supprimant les adresses en double.

<?php

 $s = "\"FirstName Last\" <email@address.com>, \"NewFirst NewLast\" <email2@address.com>";

 $emails = array();
 foreach (split(",", $s) as $full)
 {
  preg_match("/.*<([^>]+)/", $full, $email);
  $emails[] = $email[1];
 }

 print_r($emails);
?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top