PHP Email Array Regular Expression
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).
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);
?>