2012-06-27 2 views
0

Prenez ces quatre formats du paramètre from dans un en-tête de courrier électronique:PHP regex pour le courrier électronique "From" paramètre

From: Jon Doe <[email protected]>

From: "Jon Doe" <[email protected]>

From: <[email protected]>

From: [email protected]

a- quelqu'un a fait une expression régulière qui peut correspondre à l'adresse e-mail utiliser dans preg_match pour ceux-ci? Je l'ai essayé quelques-uns mais le < et > sont les attrapant à

+0

vous cherchez à correspondre simplement l'e-mail ou le tout pour chacun d'eux? – bretterer

+0

juste l'email, sans le '<' or '>' – beingalex

Répondre

1

Le regex que vous recherchez est

^From:.*?<?(\[email protected]\S+?)>?\s*$ 
This will match the whole thing in any of the 4 cases 

Si vous cherchez juste un email correspondre a été demandé encore et encore ... il suffit de chercher regex email

Email de validation qui comprendra tout e-mail avec un signe + ou. dans l'e-mail ainsi que les notions de base ressemblerait

\b[!#\$%&'\*\+\-/=\?\^_`{\|}~a-zA-Z0-9][!#\$%&'\*\+\-/=\?\^_`{\|}~a-zA-Z0-9\.]*[!#\$%&'\*\+\-/=\?\^_`{\|}~a-zA-Z0-9]@[a-zA-Z0-9\-][a-zA-Z0-9\-\.]+[a-zA-Z0-9\-]\b 
This is what I use. 
0

Essayez le regex ([^<>\s]+)>?$

2
var_dump(imap_rfc822_parse_adrlist($string)); 

Ou encore:

$headers = imap_rfc822_parse_headers("From: Jon Doe <[email protected]>"); 
$from_email = $headers->from[0]->mailbox.'@'.$headers->from[0]->host; 
+0

Je devrais dire que j'utilise Zend_Mail_Storage_Imap – beingalex

+1

Alors? Qu'est-ce qui fait la différence? Cette fonction fonctionne parfaitement bien, et attire probablement plus de cas de bords que n'importe quelle regex <25kbyte. – Wrikken

Questions connexes