Regex zur Validierung mehrerer E-Mail-Adressen
Bekam ich einen Regex, überprüft meine E-mail-Adressen wie diese:
([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)
Diese perfekt funktioniert gut, aber erlaubt nur eine e-mail eingegeben werden. Nun wollte ich verlängern, und die Möglichkeit, mehrere mail-Adressen Hinzugefügt werden (wie MS-Outlook, zum Beispiel) durch ein Semikolon als E-mail-Verteiler.
[email protected];[email protected];[email protected]
Nun habe ich gesucht und fand dieses:
([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}(;|$))
Diese arbeitet auf einen Punkt, aber leider erfordert ein Semikolon am Ende einer mail:
mail1@tld.com;
Dies ist nicht das, was ich will, wenn der Benutzer tritt nur eine e-mail.
Wie verlängere ich mein regex oben (der erste), um zu ermöglichen, dass mehrere E-mail-Adressen Hinzugefügt werden, während lassen Sie geteilt werden durch ein Semikolon?
InformationsquelleAutor der Frage SeToY | 2012-03-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist Ihre ursprüngliche Ausdruck, so verändert, dass es erlaubt, mehrere E-Mails getrennt durch Semikolon und (Optional) Räume neben dem Semikolon. Es ermöglicht auch eine einzelne E-Mail-Adresse, die nicht endet in Semikolon.
Diese können leere Einträge (kein E-Mail-Adressen). Sie können ändern Sie die Letzte *+, erfordern mindestens eine Adresse.
Wenn Sie brauchen, um zu ermöglichen, Komma, abgesehen von Semikolon, können Sie chage dieser Gruppe:
durch diese:
Wichtiger Hinweis: wie heisst es in dem Kommentar von Martin, wenn gibt es zusätzlichen text vor oder nach der korrekten E-Mail-Adresse Liste, die Validierung wird nicht scheitern. So würde es die Arbeit eines "email-Suchmaschine". Um es wie eine Prüfung, die Sie brauchen, um hinzuzufügen
^
am Anfang des regex, und$
am Ende. Dadurch wird sichergestellt, dass der Ausdruck den gesamten text. So ist der vollständige reex wäre:Können Sie fügen Sie eine zusätzliche
\s*
nach der^
zu tolerieren Leerzeichen an den Anfang der Liste, wie diese. I. e. gehören^\s*
anstatt einfach^
Den Ausdruck schon verträgt Leerzeichen am Ende ist.InformationsquelleAutor der Antwort JotaBe
Warum nicht einfach aufgeteilt auf das Semikolon, und dann überprüfen Sie jede mögliche E-Mail-Adresse mit Ihrem bestehenden regexp ? Schreiben Sie eine riesige regexp ist wird sehr schwierig sein, und ein Wartungs-Albtraum, vermute ich.
InformationsquelleAutor der Antwort Brian Agnew
Bitte versuchen Sie, diese
InformationsquelleAutor der Antwort PraveenVenu
Domain-Namen sind tatsächlich um einiges komplexer. Zum Beispiel, die meisten TLDs sind nun mit Unicode-Domainnamendie sehr Häufig in Europa. Betrachten Sie die E-Mail-Adresse mailtest@пример.испытание,, das ist eigentlich vollkommen gültig
(obwohl Sie immer transkribiert, um die alte form - [email protected]--jxalpdlp). Dies bedeutet, dass es ist wahrscheinlich einfacher, zu definieren, welche Zeichen sind nicht gültig für eine domain-Namen. Sehen ICANNs.
Zusätzlich die TLDs sind auch nicht unbedingt Teil von dem Satz, den Sie definiert haben, sehen IANAs-Liste der gültigen TLDs. Zum Beispiel, [email protected] ist eine gültige E-Mail-Adresse.
Kurz, zu validieren E-Mail-Adressen, prüfen, geht mit einem etablierten Drittanbieter-Bibliothek, es sei denn, Sie sind den Umgang mit einer begrenzten Sonderfall.
Nun für deine ursprüngliche Frage, ich würde empfehlen, eine Vorverarbeitung der Bühne, wo Sie aufgeteilt auf angemessene Trennzeichen (',' und ';'), trim whitespace (zumindest wenn der Umgang mit Benutzereingaben) und überprüfen jeden Eintrag.
InformationsquelleAutor der Antwort Krumelur
Alte post - brauchte die gleiche RegEx. Die akzeptierte Antwort hat bei mir nicht funktioniert, aber das war schon.
Abgerufen dieser Beitragjedoch ist die akzeptierte Antwort hat nicht funktioniert, aber die Regex auf den link IN der post haben.
[email protected]
- überprüft[email protected];[email protected]
- überprüft[email protected];
- nicht überprüftempty string
- überprüftWenn Sie überprüfen möchten, gegen eine leere Zeichenfolge ist, dann entfernen Sie die
|
am Anfang der regex -InformationsquelleAutor der Antwort Rob Scott
In einem alten regex buchen Sie erklärten, dass Sie nicht schreiben Sie einen regulären Ausdruck für alle gültige E-Mail-Adressen (auch wenn Sie nahe kommen kann).
Hier ist eine Webseite, die Umgang mit regex und email-Adressen.
Ich würde empfehlen, dass Sie split den string an
;
und,
Grenzen und prüfen Sie jede E-Mail-Adresse GESONDERT für gültig/ungültig mit deinem regex.InformationsquelleAutor der Antwort Uwe Keim
Unten ist meine Lösung, und es funktioniert wie erwartet für mich:
InformationsquelleAutor der Antwort Qasim Bataineh
Etwas, was ich geschrieben habe, meine Tage.
Grundlegende E-Mail-Validierung ist genommen aus der praktischen Umsetzung des RFC-2822
entspricht E-Mails mit ; separator
Ich Sie wollen mehr Separatoren swap (;)? mit [;,|]? etc innerhalb der [] Klammern.
InformationsquelleAutor der Antwort Shuffler
Hier ist ein einfaches Programm, welches das für Sie übernimmt, ohne mit dem Regulären Ausdruck.Naja, Eigentlich tut es einen regulären Ausdruck verwenden, aber wir müssen uns nicht darum kümmern, wie es aussieht .php tut dies für uns .
Haben Sie zu trennen Ihre E-Mails durch ein Semikolon.
InformationsquelleAutor der Antwort
Dies ist eine sehr alte Frage, aber ich dachte, ich würde teilen meine C# - code.
Habe ich beschlossen, zu analysieren, indem Sie das Semikolon, dann überprüfen Sie jede E-Mail individuell:
InformationsquelleAutor der Antwort Jacob Morris