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.

85voto

Bob van Luijt Punkte 6485

Dies ist die korrekte RFC822-Version.

function checkEmail(emailAddress) {
  var sQtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
  var sDtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
  var sAtom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
  var sQuotedPair = '\\x5c[\\x00-\\x7f]';
  var sDomainLiteral = '\\x5b(' + sDtext + '|' + sQuotedPair + ')*\\x5d';
  var sQuotedString = '\\x22(' + sQtext + '|' + sQuotedPair + ')*\\x22';
  var sDomain_ref = sAtom;
  var sSubDomain = '(' + sDomain_ref + '|' + sDomainLiteral + ')';
  var sWord = '(' + sAtom + '|' + sQuotedString + ')';
  var sDomain = sSubDomain + '(\\x2e' + sSubDomain + ')*';
  var sLocalPart = sWord + '(\\x2e' + sWord + ')*';
  var sAddrSpec = sLocalPart + '\\x40' + sDomain; // complete RFC822 email address spec
  var sValidEmail = '^' + sAddrSpec + '$'; // as whole string

  var reValidEmail = new RegExp(sValidEmail);

  return reValidEmail.test(emailAddress);
}

0 Stimmen

IDN-Adressen werden nicht validiert (info@üpöü.com)

0 Stimmen

'a@a' gibt gültig zurück: jsfiddle.net/pmiranda/guoyh4dv

0 Stimmen

@pmiranda Das ist eine gültige E-Mail Adresse.

81voto

Adam McKee Punkte 782

Dies wurde gestohlen von http://codesnippets.joyent.com/posts/show/1917

email = $('email');
filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (filter.test(email.value)) {
  // Yay! valid
  return true;
}
else
  {return false;}

75voto

Ryan Taylor Punkte 10733

Tun Sie dies:

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

Es basiert auf RFC 2822

Testen Sie es unter https://regex101.com/r/857lzc/1

Wenn ich E-Mail-Adressen in der Datenbank speichere, schreibe ich sie oft in Kleinbuchstaben, und in der Praxis können Regexe in der Regel ohne Berücksichtigung der Groß-/Kleinschreibung markiert werden. In diesen Fällen ist dies etwas kürzer:

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

Hier ist ein Beispiel für die Verwendung in JavaScript (mit dem Flag "case insensitive") i am Ende).

var emailCheck=/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
console.log( emailCheck.test('some.body@domain.co.uk') );

Nota :
Technisch gesehen können einige E-Mails Anführungszeichen in dem Abschnitt vor der @ Symbol mit Escape-Zeichen innerhalb der Anführungszeichen (damit Ihr E-Mail-Benutzer unausstehlich sein kann und Dinge wie @ et "..." solange es in Anführungszeichen geschrieben wird). DAS MACHT NIEMAND MEHR! Es ist veraltet. Aber es IST in der wahren Geschichte enthalten. RFC 2822 Standard und wird hier weggelassen.

Anmerkung 2 : Der Anfang einer E-Mail (vor dem @-Zeichen) kann zwischen Groß- und Kleinschreibung unterscheiden (über die Spezifikation). Aber jeder, der eine E-Mail mit Groß- und Kleinschreibung hat, ist wahrscheinlich daran gewöhnt, Probleme zu haben, und in der Praxis ist die Groß- und Kleinschreibung eine sichere Annahme. Mehr Informationen: Wird bei E-Mail-Adressen zwischen Groß- und Kleinschreibung unterschieden?

Mehr Informationen: http://www.regular-expressions.info/email.html

1 Stimmen

Gautam+@Gmail.com - Die Anzeige ist gültig und sollte nicht

3 Stimmen

@GautamParmar gmail und andere ignorieren Symbole; an gautam+@gmail.com gesendete E-Mails würden im Posteingang von gautam@gmail.com landen.

53voto

CVE-RICK Punkte 166

Ich freue mich wirklich darauf, dieses Problem zu lösen. Also habe ich den obigen regulären Ausdruck für die E-Mail-Validierung geändert

  • Original
    /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

  • Geändert
    /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()\.,;\s@\"]+\.{0,1})+[^<>()\.,;:\s@\"]{2,})$/

um die Beispiele in Wikipedia-E-Mail-Adresse .

Und das Ergebnis sehen Sie in aquí .

enter image description here

38voto

Prüfen Sie einfach mit HTML, ob die eingegebene E-Mail-Adresse gültig ist oder nicht.

<input type="email"/>

Es besteht keine Notwendigkeit, eine Funktion für die Validierung zu schreiben.

0 Stimmen

Dies ist die einfachste Lösung, wir können auch eine externe Bibliothek wie E-Mail-Prüfer um die Dinge zu erleichtern, wie hier erwähnt qawithexperts.com/article/javascript/

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