5474 Stimmen

Wie lässt sich eine E-Mail-Adresse am besten in JavaScript validieren?

Wie kann ich eine E-Mail-Adresse in JavaScript am besten mit einem regulären Ausdruck überprüfen?

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.

4voto

hmharsh3 Punkte 185

Sie können auch versuchen

var string = "hmharsh3@gmail.com"
var exp = /(\w(=?@)\w+\.{1}[a-zA-Z]{2,})/i
alert(exp.test(string))

4voto

Jaskaran Singh Punkte 824

Wenn Sie diesen Fehler erhalten: Die Verwendung regulärer Ausdrücke ist sicherheitsrelevant.

Dann sind Sie hier genau richtig. Diese Lösung ist frei von " Regular expression Denial of Service (ReDoS) "

Regex zur Validierung von E-Mails ohne (ReDoS):

/^[a-z0-9](?!.*?[^\na-z0-9]{2})[^\s@]+@[^\s@]+\.[^\s@]+[a-z0-9]$/

Bitte lassen Sie mich wissen, ob diese Lösung für Sie funktioniert. T

4voto

Mattia Rasulo Punkte 880

Sie können diese Regex (aus w3resource (*nicht mit dem W3C verbunden) ):

/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(emailValue)

Wenn Sie Node verwenden, können Sie dies sowohl im Back-End als auch im Front-End nutzen.

Ich kenne keine anderen Backend-Sprachen, daher kann ich keine anderen Anwendungsfälle beurteilen.

4 Stimmen

Dieser Regex schlägt bei "user+addition@gmail.com" und bei "user@email.longdomain" fehl. Nicht verwenden.

0 Stimmen

User+addition ist eine gültige E-Mail und longdomain ist nicht unbedingt ungültig..

0 Stimmen

Genau, keine Regex wird jemals in der Lage sein, das Format einer E-Mail vollständig zu überprüfen, und selbst wenn sie es könnte, kann sie keine domänenspezifischen Regeln kennen, nur nach einem @ suchen und damit fertig sein oder eine Bestätigungs-E-Mail senden. Alles andere würde nur zu Problemen führen.

4voto

Priya Punkte 126

Verwenden Sie den regulären Ausdruck:

 /^[a-z][a-zA-Z0-9_.]*(\.[a-zA-Z][a-zA-Z0-9_.]*)?@[a-z][a-zA-Z-0-9]*\.[a-z]+(\.[a-z]+)?$/

Ejemplo:

function validateEmail(email) {
    var re = /^[a-z][a-zA-Z0-9_.]*(\.[a-zA-Z][a-zA-Z0-9_.]*)?@[a-z][a-zA-Z-0-9]*\.[a-z]+(\.[a-z]+)?$/;
    return re.test(email);
}

Es sollte nur @ , . , _

4voto

Code Spy Punkte 8650

Folgende Regex-Validierungen:

  • Keine Leerzeichen vor @
  • (-) und (.) sollten nicht zusammen sein nach @ Keine Sonderzeichen nach @ 2 Zeichen müssen vor @ stehen E-Mail-Länge sollte weniger als 128 Zeichen betragen

    function validateEmail(email) { var chrbeforAt = email.substr(0, email.indexOf('@')); if (!($.trim(email).length > 127)) { if (chrbeforAt.length >= 2) { var re = /^(([^>()[\]{}'^?\\.,!|//#%*-+=&;:\s@\"]+(\.[^<()[]\.,;:\s@\"]+))|(\".+\"))@(?:[a-z0-9](?:[a-z0-9-][a-z0-9])?.)+a-z0-9?/; //var re = /[a-z0-9!#$%&'+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'+/=?^_`{|}~-]+)@(?:[a-z0-9](?:[a-z0-9-][a-z0-9])?.)+a-z0-9?/; return re.test(email); } else { return false; } } else { return false; } }

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