2010-10-07 5 views
5

Wenn es einen gibt, der damit umgehen könnte, was wäre das richtige Regex-Muster, um E-Mail-Adressen aus einer Zeichenfolge aus einer E-Mail-Formular "An" -Zeile zu extrahieren, die die Adressen ermöglicht durch Kommas ",", Semikolons ";", Leerzeichen oder eine beliebige Kombination der drei Zeichen getrennt sein. Die Regex muss auch "Noise" -Text ignorieren können, beispielsweise wenn eine Adresse in die Zeichen "<" und ">" eingeschlossen ist oder einen tatsächlichen Namen neben der E-Mail-Adresse hat. Zum Beispiel aus dieser Zeichenfolge, die in dem Feld war:Regex zum Parsen E-Mail-Formular "To" Feld

"Joe Smith" <[email protected]>, [email protected]; [email protected] [email protected] 

Das Muster sollte die folgenden Spiele von zurückkehren kann: jsmith @ Beispiel [email protected], [email protected], mjane @ gmail.com

Ich benutze PHP, wenn dies nicht in einzelnen Regex getan werden kann, dann bin ich definitiv offen für andere PHP-basierte Lösungen.

Dank

+3

Verwenden Sie eine E-Mail-Parsing-Bibliothek. Es besteht keine Notwendigkeit, dies selbst zu tun. (Du bist nicht der erste PHP-Programmierer, der E-Mail-Header parsen muss.) – Ether

Antwort

6

Versuchen

\b[A-Z0-9._%+-][email protected](?:[A-Z0-9-]+\.)+[A-Z]{2,6}\b 

(mit freundlicher Genehmigung von RegexBuddy), wie in

preg_match_all('/\b[A-Z0-9._%+-][email protected](?:[A-Z0-9-]+\.)+[A-Z]{2,6}\b/i', $subject, $result, PREG_PATTERN_ORDER); 
$result = $result[0]; 

Notiere die /i Modifikator es Groß- und Kleinschreibung zu machen.

Siehe auch this question für eine Erklärung der Nachteile von Regexes zum Auffinden von E-Mail-Adressen in einer Zeichenfolge.

+3

danke, dass du '+' in meiner E-Mail-Adresse zugelassen hast ... in letzter Zeit sind mir einige Anmeldeformen begegnet, die das nicht zulassen. .really ärgert mich. – mpen

1

Während Ihre Frage zu RegEx war spezifisch und Tim hat Ihnen eine große Antwort, für Menschen nach einer einfachen Lösung suchen, schauen Sie auf mailparse_rfc822_parse_addresses auf Seite http://php.net/manual/en/function.mailparse-rfc822-parse-addresses.php

Hinweis: Dies ist kein Standard-PHP-Funktion und erfordert die Erweiterung der Installation . Economy-Hosting-Lösungen erlauben möglicherweise nicht die Installation der PECL-Erweiterung.