2009-12-02 16 views

Répondre

3

PHP’s Mailparse extension a un mailparse_rfc822_parse_addresses function vous voudrez peut-être essayer. Sinon, vous devriez construire votre propre analyseur d'adresse.

+1

+1 Réinventer la roue = mauvais. Réinventer la roue en utilisant regex = pire. –

+0

+1 Je me suis laissé emporter par l'approche regex. Cela semble être la façon de le faire. – jensgram

+0

Ou, comme lu dans cette fonction commentaires, vous pouvez utiliser ce paquet PEAR: http://pear.php.net/manual/en/package.mail.mail-rfc822.parseaddresslist.php – Arkh

1
<?php 

$s = "\"FirstName Last\" <[email protected]>, \"NewFirst NewLast\" <[email protected]>"; 

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

print_r($emails); 
?> 
+0

Que faire si le nom d'affichage cité contient une virgule? – Gumbo

+0

Ne fonctionne pas si bien –

2

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 '/<([^@][email protected][^>]+)>/'. Je ne sais pas si cela est fail-safe, bien :)


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

+1

Et, bien sûr, cela échoue sur les adresses e-mail comme '"> "@ example.com'. L'e-mail n'est-il pas génial? Non que cette expression ne fonctionne pas pour tous les e-mails en pratique, * en théorie * c'est faux. +1 de toute façon. – Welbog

+0

Que faire si le nom d'affichage cité contient '<…>'? – Gumbo

+0

Votre failsafe échoue toujours en théorie: '" @> "@ example.com' E-mail craint. Pourtant, j'aime l'effort que vous mettez dans cela. Vous ne pouvez pas vraiment analyser l'e-mail parfaitement avec une expression régulière. Du moins pas très simple. Je crois qu'il y en a un flottant de plusieurs centaines de caractères qui fait le travail. http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html Il s'avère que c'est plusieurs * mille * caractères. – Welbog