7 Stimmen

Regex zum Analysieren des E-Mail-Formularfelds "An"

Wenn es einen gibt, der damit umgehen könnte, wie würde das richtige Regex-Muster aussehen, um E-Mail-Adressen aus einem String zu extrahieren, der aus einer E-Mail-Formularzeile "An" stammt, das Adressen durch Kommas ",", Semikolons ";", Leerzeichen oder eine Kombination der drei trennt. Das Regex muss auch in der Lage sein, "Störtext" zu ignorieren, z. B. wenn eine Adresse in Zeichen "<" und ">" eingeschlossen ist oder einen tatsächlichen Namen neben der E-Mail-Adresse hat. Zum Beispiel aus diesem String, der im An-Feld war:

"Joe Smith" , kjones@aol.com; someoneelse@nowhere.com mjane@gmail.com

Das Muster sollte die folgenden Übereinstimmungen zurückgeben können: jsmith@example, kjones@aol.com, someoneelse@nowhere.com, mjane@gmail.com

Ich benutze PHP, also wenn das nicht in einem einzigen Regex gemacht werden kann, bin ich definitiv für andere PHP-basierte Lösungen offen.

Danke

3 Stimmen

Benutzen Sie eine E-Mail-Parser-Bibliothek. Es ist nicht notwendig, dies selbst zu tun. (Sie sind nicht der erste PHP-Programmierer, der E-Mail-Header analysieren muss.)

8voto

Tim Pietzcker Punkte 311448

Probieren Sie es aus

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

(Mit freundlicher Genehmigung von RegexBuddy) wie folgt

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

Beachten Sie den /i Modifier, um ihn nicht zwischen Groß- und Kleinschreibung zu unterscheiden.

Sehen Sie auch diese Frage für eine Erklärung der Nachteile von Regexen beim Auffinden von E-Mail-Adressen in einem String.

2voto

cambraca Punkte 25816

Ich habe das Regex von http://www.webcheatsheet.com/php/regular_expressions.php bekommen und nur leicht modifiziert.

$string = '"Joe Smith" <jsmith@example.com>, kjones@aol.com; someoneelse@nowhere.com mjane@gmail.com';
$email_regex = "/[^0-9< ][A-z0-9_]+([.][A-z0-9_]+)*@[A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}/";
preg_match_all($email_regex, $string, $matches);
$emails = $matches[0];

Jetzt enthält $emails ein Array mit allen E-Mail-Adressen.

1voto

Fraser Marlow Punkte 11

Obwohl Ihre Frage spezifisch für RegEx war und Tim Ihnen eine großartige Antwort gegeben hat, sollten Personen, die nach einer einfachen Lösung suchen, sich die Funktion mailparse_rfc822_parse_addresses auf der Seite http://php.net/manual/de/function.mailparse-rfc822-parse-addresses.php ansehen.

Beachten Sie, dass dies keine Standard-PHP-Funktion ist und das Installieren der Erweiterung erfordert. Günstige Hosting-Lösungen ermöglichen möglicherweise nicht die Installation der PECL-Erweiterung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X