Wie kann ich eine E-Mail-Adresse in JavaScript am besten mit einem regulären Ausdruck überprüfen?
Jetzt extrem veraltet.
Wie kann ich eine E-Mail-Adresse in JavaScript am besten mit einem regulären Ausdruck überprüfen?
Hier gibt es eine sehr gute Diskussion über die Verwendung regulärer Ausdrücke zur Überprüfung von E-Mail-Adressen; " Vergleichen von regulären Ausdrücken zur Überprüfung von E-Mail-Adressen "
Hier ist der aktuelle Top-Ausdruck, der mit JavaScript kompatibel ist, zu Referenzzwecken:
/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i
Wow, es gibt eine Menge von Antworten, die leicht unterschiedliche reguläre Ausdrücke enthalten. Ich habe viele ausprobiert, die alle zu unterschiedlichen Ergebnissen und einer Vielzahl von Problemen geführt haben.
Für UI-Validierung, ich bin gut mit der grundlegenden Überprüfung der Suche nach einem @-Zeichen . Es ist wichtig zu beachten, dass ich die serverseitige Validierung immer mit einer Standard-"Validierungs-E-Mail" durchführe, die einen eindeutigen Link enthält, mit dem der Benutzer seine E-Mail-Adresse bestätigen kann.
if (email.indexOf('@') > 0)
Ich habe absichtlich die 0 gewählt, auch wenn sie auf Null basiert, da sie auch sicherstellt, dass ein einzelnes Zeichen vor dem @ steht.
Das war's dann anscheinend:
/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i
Entnommen aus http://fightingforalostcause.net/misc/2006/compare-email-regex.php am 1. Oktober '10.
Aber das ist natürlich eine Vernachlässigung der Internationalisierung.
Ich war auf der Suche nach einer Regex in JS, die alle E-Mail Adresse Testfälle besteht:
email@example.com
Gültige E-Mail
firstname.lastname@example.com
E-Mail enthält Punkt im Adressfeld
email@subdomain.example.com
E-Mail enthält Punkt mit Subdomain
firstname+lastname@example.com
Das Pluszeichen gilt als gültiges Zeichen
email@192.0.2.123
Domäne ist gültige IP-Adresse
email@[192.0.2.123]
Eine eckige Klammer um die IP-Adresse wird als gültig angesehen
“email”@example.com
Anführungszeichen um die E-Mail werden als gültig angesehen
1234567890@example.com
Ziffern in der Adresse sind gültig
email@domain-one.example
Bindestrich im Domänennamen ist gültig
_______@example.com
Unterstrich im Adressfeld ist gültig
email@example.name
.name
ist ein gültiger Name der Domäne oberster Stufe
email@example.co.jp
Der Punkt im Namen der Domäne oberster Stufe gilt ebenfalls als gültig (mit co.jp
als Beispiel hier)
firstname-lastname@example.com
Bindestrich im Adressfeld ist gültig
Jetzt geht's los:
OR regex:
Regex = /(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@[*[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+]*/
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.
23 Stimmen
@Alex Der Grund, warum ich diesen Kommentar hinzugefügt habe, ist, dass die vorgeschlagene Regex in der akzeptierten Antwort keine existierenden Live-E-Mail-Adressen zulässt, was ein schlechter Start für einen Kunden ist, und das wirklich große Problem ist, dass selbst WENN die Adresse akzeptiert wurde, sie immer noch nicht sagt, ob sie funktioniert. Die einzige Möglichkeit, zuverlässig zu überprüfen, ob eine angegebene E-Mail eine funktionierende, gültige E-Mail ist, besteht darin, eine E-Mail mit einem Verifizierungslink zu senden. Wenn Ihr Anwendungsfall also keine Verifizierung der E-Mail erfordert, genügt ein minimaler Test auf @, andernfalls sollten Sie eine Verifizierungs-E-Mail verwenden. Regex wird nur eine schlechte Benutzererfahrung bieten.
0 Stimmen
@David Mårtensson Ich habe ein + auf Ihre Gedanken hinzugefügt. Ich denke jedoch, dass eine Verifizierungs-E-Mail-Link-Sache auch eine schlechte Benutzererfahrung sein kann. Eine, die Sie einen Kunden verlieren kann.
7 Stimmen
@mikael1000 Sicher, aber was ist der Zweck einer Regex-Validierung, wenn man sowieso nicht weiß, ob es eine gültige E-Mail ist. Wenn Sie den Kunden nicht mit einem Validierungslink belästigen wollen, machen Sie einfach die einfachste Validierung <irgendwas> bei <irgendwas> und belassen es dabei. Damit stellen Sie sicher, dass der Kunde zumindest etwas eingegeben hat, das eine E-Mail sein könnte, alles andere ist meist Codeverschwendung, bis Sie zur eigentlichen Validierung kommen. Sie könnten möglicherweise überprüfen, ob die Domäne mit einem DNS-Lookup existiert.
0 Stimmen
@DavidMårtensson Wenn ein Kunde in seiner E-Mail ein Zeichen falsch eingibt, wird die E-Mail mit Regexp validiert, wenn sie immer noch falsch ist. Das Ergebnis wird sein: keine Kommunikation möglich. Für mich ist das das schlechteste Benutzererfahrung, die man sich vorstellen kann. Eine Validierungsbestätigung verwickelt den Nutzer in ein Gespräch, das Respekt und echtes Interesse an den Bedürfnissen des Kunden zeigt.
0 Stimmen
Wenn Sie dem Muster von Gmail/Yahoo/Outlook/... folgen wollen, verwenden Sie dies einfacher Regex
2 Stimmen
Sehr ähnlich: Wie kann ich eine E-Mail-Adresse mithilfe eines regulären Ausdrucks überprüfen?
0 Stimmen
Wenn diese Frage offen bleiben soll, muss "Validierung" entfernt werden, andernfalls sollte sie geschlossen werden.
2 Stimmen
Diese Frage wird diskutiert auf meta .
0 Stimmen
@theking2 Ich stimme zu, dass regex nur hilft, das Standard-E-Mail-Format zu überprüfen, aber es wird nicht bestätigen, dass die eingegebene E-Mail-Adresse gültig oder erreichbar ist. Dieses Problem wird von einigen Echtzeit-E-Mail-Validierungstools angegangen. Sie müssen vielleicht prüfen clearout.io/integrationen/echtzeit-javascript-email-validierung . Es hilft sogar, die falsch eingegebene E-Mail-Adresse vorzuschlagen.
0 Stimmen
Ich empfehle, diesen Artikel über die Funktionsweise der E-Mail-Syntax zu lesen: debounce.io/blog/articles/email-syntax-error-explained
0 Stimmen
Ist damit Ihre Frage beantwortet? Wie kann ich eine E-Mail-Adresse mithilfe eines regulären Ausdrucks überprüfen?
3 Stimmen
Ich muss zugeben, dass ich nicht verstehe, warum so viel Validierung betrieben wird, wenn man nicht vorhersagen kann, ob der Benutzer überhaupt einen Basistyp unter Verwendung der gültigen Zeichen erstellt hat. Eine Prüfung auf @ und mindestens einen Punkt reicht am Anfang aus.