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.

35voto

Zo72 Punkte 13803

Sie sollten keine regulären Ausdrücke verwenden, um einen Eingabe-String zu überprüfen, ob es sich um eine E-Mail handelt. Das ist zu kompliziert und würde nicht alle Fälle abdecken.

Da Sie nur 90 % der Fälle abdecken können, schreiben Sie etwas wie:

function isPossiblyValidEmail(txt) {
   return txt.length > 5 && txt.indexOf('@')>0;
}

Sie können es verfeinern. Zum Beispiel ist "aaa@" gültig. Aber im Großen und Ganzen haben Sie das Wesentliche verstanden. Und übertreiben Sie es nicht... Eine einfache 90%ige Lösung ist besser als eine 100%ige Lösung, die nicht funktioniert.

Die Welt braucht einfacheren Code...

27 Stimmen

Dies ermöglicht die Eingabe von so vielen ungültigen E-Mail-Adressen, dass es ein nutzloser Ratschlag ist.

33voto

Liberateur Punkte 1107

Wikipedia Standard-Mail-Syntax :

https://en.wikipedia.org/wiki/Email_address#Examples https://fr.wikipedia.org/wiki/Adresse_%C3%A9lectronique#Syntaxe_exacte

Funktion :

function validMail(mail)
{
    return /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()\.,;\s@\"]+\.{0,1})+([^<>()\.,;:\s@\"]{2,}|[\d\.]+))$/.test(mail);
}

Gültige Mails :

validMail('Abc@example.com') // Return true
validMail('Abc@example.com.') // Return true
validMail('Abc@10.42.0.1') // Return true
validMail('user@localserver') // Return true
validMail('Abc.123@example.com') // Return true
validMail('user+mailbox/department=shipping@example.com') // Return true
validMail('"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com') // Return true
validMail('!#$%&\'*+-/=?^_`.{|}~@example.com') // Return true
validMail('"()<>[]:,;@\\\"!#$%&\'-/=?^_`{}| ~.a"@example.org') // Return true
validMail('"Abc@def"@example.com') // Return true
validMail('"Fred Bloggs"@example.com') // Return true
validMail('"Joe.\\Blow"@example.com') // Return true
validMail('Loïc.Accentué@voilà.fr') // Return true
validMail('" "@example.org') // Return true
validMail('user@[IPv6:2001:DB8::1]') // Return true

Invalidenpost :

validMail('Abc.example.com') // Return false
validMail('A@b@c@example.com') // Return false
validMail('a"b(c)d,e:f;g<h>i[j\k]l@example.com') // Return false
validMail('just"not"right@example.com') // Return false
validMail('this is"not\allowed@example.com') // Return false
validMail('this\ still\"not\\allowed@example.com') // Return false
validMail('john..doe@example.com') // Return false
validMail('john.doe@example..com') // Return false

Diesen Test anzeigen: https://regex101.com/r/LHJ9gU/1

0 Stimmen

Diese Adresse "abc@example" soll false zurückgeben, aber sie gibt true zurück. Die Wiki-Seite erwähnt das: "Sie muss den Anforderungen für einen Hostnamen entsprechen". de.wikipedia.org/wiki/E-Mail-Adresse#Domäne

0 Stimmen

abc.def@mail return true :(

29voto

Juan Pablo Punkte 16

Regex-Update 2018! Versuchen Sie dies

let val = 'email@domain.com';
if(/^[a-z0-9][a-z0-9-_\.]+@([a-z]|[a-z0-9]?[a-z0-9-]+[a-z0-9])\.[a-z0-9]{2,10}(?:\.[a-z]{2,10})?$/.test(val)) {
   console.log('passed');
}

Typscript-Version vollständig

//
export const emailValid = (val:string):boolean => /^[a-z0-9][a-z0-9-_\.]+@([a-z]|[a-z0-9]?[a-z0-9-]+[a-z0-9])\.[a-z0-9]{2,10}(?:\.[a-z]{2,10})?$/.test(val);

mehr Infos https://git.io/vhEfc

0 Stimmen

Ich glaube nicht, dass dies für einen Großteil der Welt nützlich ist - und für viele Kunden eine nicht triviale Zielgruppe. Für internationalisierte Benutzernamen und Domänen ist es nicht geeignet. Meine Antwort weiter unten geht darauf ein, indem ich die URL-Schnittstelle verwende, deren Unterstützung bereits in den meisten Laufzeiten integriert ist: stackoverflow.com/a/72018404/965666

0 Stimmen

Dieser hier übertrifft alle meine E-Mails :D

0 Stimmen

Vielleicht sollte man bei der Regex die Groß- und Kleinschreibung außer Acht lassen. Andernfalls wird die E-Mail-Adresse mit den Großbuchstaben nicht akzeptiert.

25voto

jacobangel Punkte 6688

Es ist schwer, einen E-Mail-Validator zu 100% korrekt zu machen. Die einzige Möglichkeit, es richtig zu machen, wäre, eine Test-E-Mail an das Konto zu senden. Es gibt jedoch ein paar grundlegende Überprüfungen, mit denen Sie sicherstellen können, dass Sie etwas Vernünftiges erhalten.

Einige Dinge müssen verbessert werden:

Anstelle von neuen RegExp schreiben, versuchen Sie einfach die regexp so aus:

if (reg.test(/@/))

Zweitens: Stellen Sie sicher, dass ein Punkt nach der @ und stellen Sie sicher, dass die Zeichen zwischen den @ s und Zeiträume.

21voto

pera Punkte 839

Dies ist der Weg node-validator tut es:

/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[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]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/

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