Was ist der beste Weg, um eine E-Mail-Adresse in JavaScript zu validieren?

Lesezeit: 7 Minuten

Was ist der beste Weg, um eine E-Mail-Adresse in JavaScript mit einem regulären Ausdruck zu validieren?

  • @Alex Der Grund, warum ich diesen Kommentar hinzugefügt habe, ist, dass die vorgeschlagene Regex in der akzeptierten Antwort keine vorhandenen 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, dies immer noch nicht der Fall ist sagen, ob es funktioniert. Die einzige Möglichkeit, zuverlässig zu überprüfen, ob eine bereitgestellte E-Mail eine funktionierende gültige E-Mail ist, besteht darin, eine E-Mail mit einem Bestätigungslink zu senden. Wenn Ihr Anwendungsfall also keine Verifizierung der E-Mail erfordert, führen Sie einfach einen minimalen Test für @ durch, andernfalls verwenden Sie eine Verifizierungs-E-Mail. Regex bietet nur eine schlechte Benutzererfahrung.

    – David Martensson

    3. Mai 2021 um 14:56 Uhr

  • @David Mårtensson Ich habe deinen Gedanken ein + hinzugefügt. Ich denke jedoch, dass eine Verifizierungs-E-Mail-Link-Sache auch eine schlechte Benutzererfahrung sein kann. Einer, der dazu führen kann, dass Sie einen Kunden verlieren.

    – mikael1000

    3. Juni 2021 um 10:22 Uhr


  • @mikael1000 Sicher, aber was ist der Zweck einer Regex-Validierung, wenn Sie sowieso nicht wissen, ob es sich um eine gültige E-Mail handelt. Wenn Sie den Kunden nicht mit einem Validierungslink aufdrängen wollen, führen Sie einfach die einfachste Validierung bei durch und belassen es dabei. Es wird sichergestellt, dass der Kunde zumindest etwas hinzugefügt hat, das eine E-Mail sein könnte, alles andere ist meistens eine Verschwendung von Code, bis Sie zur tatsächlichen Validierung kommen. Sie können möglicherweise mit einem DNS-Lookup überprüfen, ob die Domain existiert.

    – David Martensson

    4. Juni 2021 um 14:23 Uhr

  • @DavidMårtensson Ein Kunde, der ein Zeichen in seiner E-Mail falsch eingibt, wird dessen regulären Ausdruck validieren lassen, wenn es immer noch falsch ist. Das Ergebnis wird sein: Nein Kommunikation möglich. Für mich ist das die am schlimmsten Benutzererfahrung, die man sich vorstellen kann. Eine Validierungsbestätigung wird den Benutzer in ein Gespräch verwickeln, das Respekt und echtes Interesse an den Kundenbedürfnissen zeigt.

    – der König2

    6. Dezember 2021 um 12:39 Uhr

  • Wenn Sie dem Gmail/Yahoo/Outlook/…-Muster folgen möchten, verwenden Sie dies einfache Regex

    – MMMahdy-PAPION

    8. Februar um 9:13

Ich habe Jaymons Antwort leicht modifiziert für Leute, die eine wirklich einfache Validierung in Form von:

anystring@anystring.anystring

Der reguläre Ausdruck:

/\S+@\S+\.\S+/

So verhindern Sie, dass mehrere @-Zeichen übereinstimmen:

/^[^\s@]+@[^\s@]+\.[^\s@]+$/

Beispiel JavaScript-Funktion:

function validateEmail(email) 
    {
        var re = /\S+@\S+\.\S+/;
        return re.test(email);
    }
    
console.log(validateEmail('anystring@anystring.anystring'));

  • Sie können etwas 20x so lange implementieren, was einigen Benutzern Probleme bereiten könnte und in Zukunft möglicherweise nicht mehr gültig ist, oder Sie können sich die Version von ImmortalFirefly schnappen, um sicherzustellen, dass sie sich zumindest die Mühe machen, es echt aussehen zu lassen. Abhängig von Ihrer Anwendung ist es wahrscheinlicher, dass jemand wütend wird, weil Sie seine unkonventionelle E-Mail nicht akzeptieren, als dass jemand Probleme verursacht, indem er E-Mail-Adressen eingibt, die nicht wirklich existieren (was er sowieso durch Eingabe tun kann eine 100 % gültige RFC2822-E-Mail-Adresse, aber mit einem nicht registrierten Benutzernamen oder einer nicht registrierten Domäne). Upvoted!

    – user83358

    30. Juli 2012 um 18:20 Uhr


  • @ImmortalFirefly, die von Ihnen bereitgestellte Regex stimmt tatsächlich überein name@again@example.com. Versuchen Sie, Ihre Zeile in eine JavaScript-Konsole einzufügen. Ich glaube, Ihre Absicht war es, nur den gesamten Text abzugleichen, was den Anfang des Textes ‘^’ und das Ende des Textes ‘$’ erfordern würde. Die, die ich verwende, ist /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test('name@again@example.com')

    – OregonTrail

    9. August 2012 um 14:58 Uhr

  • Der zweite reguläre Ausdruck erfordert keine Top-Level-Domain, dh er akzeptiert user@domain. Aber AFAIK ist dies tatsächlich eine gültige E-Mail-Adresse, obwohl dies ungewöhnlich ist. Der erste reguläre Ausdruck erfordert eine TLD, sodass diese Arten von Adressen nicht abgedeckt werden.

    – Waldgeist

    15. Juli 2021 um 13:00 Uhr

  • E-Mails können mehrere enthalten @ Zeichen (als Kommentar), auch eine E-Mail muss keinen Punkt enthalten.

    – Ruola

    6. Oktober 2021 um 14:08 Uhr

  • @ruohola ist dies auch der Grund, warum eine E-Mail gültig ist, nachdem Sie ein @-Zeichen ohne Punkte danach eingegeben haben?

    – José G.

    10. Februar um 9:10 Uhr

  • NB: „Im tatsächlichen Gebrauch heute” kann gültig gewesen sein, als der Code geschrieben wurde, damals im Jahr 200x. Der Code Wille wahrscheinlich über dieses bestimmte Jahr hinaus in Gebrauch bleiben. (Wenn ich einen Cent für jedes “meh, niemand wird jemals eine 4+-Buchstaben-TLD verwenden, außer diesen spezifischen”, die ich reparieren müsste, hätte ich den Kupfer- und Nickelmarkt der Welt in die Enge ;))

    – Piskvor verließ das Gebäude

    13. Juni 2012 um 15:51 Uhr


  • Beachten Sie, dass dies einige gültige E-Mail-Adressen wie diese Emoji-Adressen nicht erfasst: mailoji.com

    – Toasttrackenigma

    6. Oktober 2021 um 1:28 Uhr

Wow, hier gibt es viel Komplexität. Wenn Sie nur die offensichtlichsten Syntaxfehler abfangen möchten, würde ich so etwas tun:

^\S+@\S+$

Es fängt normalerweise die offensichtlichsten Fehler ab, die der Benutzer macht, und stellt sicher, dass das Formular größtenteils richtig ist, worum es bei der JavaScript-Validierung geht.

BEARBEITEN: Wir können auch nach ‘.’ in der E-Mail mit

/^\S+@\S+\.\S+$/

  • +1, da das Senden von E-Mails und das Beobachten dessen, was passiert, der einzige wirklich sichere Weg ist, eine E-Mail-Adresse zu validieren. Es ist nicht erforderlich, mehr als einen einfachen Regex-Abgleich zu tun.

    – kommradHomer

    19. Juli 2012 um 7:14 Uhr

  • Aber “Mohit Atray”@gmail.com wird nicht akzeptiert, da es Leerzeichen enthält. Vielleicht sollten wir einfach /^\S.*@\S+$/ regex verwenden.

    – Mohit Atray

    8. Juli 2021 um 19:57 Uhr

Es gibt etwas, das Sie verstehen müssen, sobald Sie sich entscheiden, einen regulären Ausdruck zur Validierung von E-Mails zu verwenden: Es ist wahrscheinlich keine gute Idee. Sobald Sie sich damit abgefunden haben, gibt es viele Implementierungen, die Sie auf halbem Weg dorthin bringen können. Dieser Artikel fasst sie gut zusammen.

Kurz gesagt, der einzige Weg, um absolut sicher zu sein, dass das, was der Benutzer eingegeben hat, tatsächlich eine E-Mail ist, besteht darin, tatsächlich eine E-Mail zu senden und zu sehen, was passiert. Ansonsten sind alles nur Vermutungen.

  • +1, da das Senden von E-Mails und das Beobachten dessen, was passiert, der einzige wirklich sichere Weg ist, eine E-Mail-Adresse zu validieren. Es ist nicht erforderlich, mehr als einen einfachen Regex-Abgleich zu tun.

    – kommradHomer

    19. Juli 2012 um 7:14 Uhr

  • Aber “Mohit Atray”@gmail.com wird nicht akzeptiert, da es Leerzeichen enthält. Vielleicht sollten wir einfach /^\S.*@\S+$/ regex verwenden.

    – Mohit Atray

    8. Juli 2021 um 19:57 Uhr

HTML5 selbst verfügt über eine E-Mail-Validierung. Wenn Ihr Browser HTML5 unterstützt, können Sie den folgenden Code verwenden.

<form>
  <input type="email" placeholder="me@example.com" required>
  <input type="submit">
</form>

jsFiddle Verknüpfung

Von dem HTML5-Spezifikation:

EIN gültige Email Addresse ist eine Zeichenfolge, die mit der übereinstimmt email Produktion des folgenden ABNF, dessen Zeichensatz Unicode ist.

email   = 1*( atext / "." ) "@" label *( "." label )
label   = let-dig [ [ ldh-str ] let-dig ]  ; limited to a length of 63 characters by RFC 1034 section 3.5
atext   = < as defined in RFC 5322 section 3.2.3 >
let-dig = < as defined in RFC 1034 section 3.5 >
ldh-str = < as defined in RFC 1034 section 3.5 >

Diese Anforderung ist a vorsätzliche Verletzung des RFC 5322, der eine Syntax für E-Mail-Adressen definiert, die gleichzeitig zu streng (vor dem “@”-Zeichen), zu vage (nach dem “@”-Zeichen) und zu lax (Kommentare, Leerzeichen und Anführungszeichen zulassen) ist Zeichenfolgen in einer den meisten Benutzern ungewohnten Weise), um hier von praktischem Nutzen zu sein.

Der folgende JavaScript- und Perl-kompatible reguläre Ausdruck ist eine Implementierung der obigen Definition.

/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/

  • das ist gut, aber das Problem dabei ist, dass es in a sein muss form tag und übermittelt von a submit Input, was nicht jeder leisten kann. Außerdem können Sie die Fehlermeldung nicht wirklich formatieren.

    – Jason

    12. November 2011 um 0:08 Uhr

  • Zuerst fand ich diese Antwort nützlich, aber ich habe es mit einer ungültigen E-Mail-Adresse versucht und die Regex sagte, es seien gültig … zum Beispiel: bar@domain (Erweiterung fehlt), A@b@c@example.com (mehrere @) und so weiter (vgl en.wikipedia.org/wiki/Email_address#Examples). Ich habe hier eine schöne Regex gefunden: emailregex.com

    – Thomas Meister

    22. Oktober 2021 um 15:30 Uhr

  • @ThomasChampion Mehrere „@“ sind gültig. Der erste Punkt ist jedoch gültig.

    – KNP

    6. Dezember 2021 um 18:26 Uhr

  • @KNP Mehrfach @ ist nur gültig, wenn das zusätzliche “@” im Teil des Benutzernamens erscheint und in doppelte Anführungszeichen eingeschlossen ist. Es scheint, dass auch der zweite Punkt (fehlende Erweiterung) seit 2013 nicht mehr gültig ist (icann.org/en/announcements/details/…), aber ja, es kommt darauf an, ich denke, jemand könnte die Erweiterung als optional betrachten. Schließlich wähle ich das Modul aus address von joi: joi.dev/module/address/api/?v=4.1.0#emailisvalidemail-options um E-Mail-Adressen in meiner App zu validieren.

    – Thomas Meister

    7. Dezember 2021 um 21:37 Uhr


985950cookie-checkWas ist der beste Weg, um eine E-Mail-Adresse in JavaScript zu validieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy