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.

2voto

Code Spy Punkte 8650

Folgende Regex-Validierungen:

  • Keine Leerzeichen vor @
  • (-) und (.) sollten nicht zusammen nach @ stehen
  • Keine Sonderzeichen nach @ 2 Zeichen müssen vor @ stehen
  • Die Länge der E-Mail 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](?:[a-z0-9-]*[a-z0-9])?/;
                return re.test(email);
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

2voto

chemic Punkte 790

Wer die Lösung von @pvl verwendet und möchte, dass sie funktioniert ESLint Vorzugsvorlage dann ist hier eine Version, in der ich Schablonenliterale anstelle von String-Verkettungen verwendet habe.

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

    let reValidEmail = new RegExp(sValidEmail);

    return reValidEmail.test(email);
}

2voto

Himanshu Teotia Punkte 1805

In nodeJS können Sie auch das Validator-Knotenmodul verwenden und einfach wie folgt vorgehen

Installieren Sie die Bibliothek mit npm install validator

var validator = require('validator');

validator.isEmail('foo@bar.com'); //=> true

2voto

Abhay Shiro Punkte 2815

Hier sind einige komplexe RegEx geschrieben, die auch funktionieren.

Ich habe dies getestet und es funktioniert auch:

[a-zA-Z0-9._]+[@]+[a-zA-Z0-9]+[.]+[a-zA-Z]{2,6}

Bitte testen Sie dies hier: http://www.regextester.com/?fam=97334

Ich hoffe, das hilft.

0 Stimmen

me@localhost scheitert.

2voto

Alireza Punkte 92209

Wie wäre es, eine Funktion zu erstellen, die eine beliebige Zeichenkette mit Hilfe eines regulären Ausdrucks in JavaScript gegen ein E-Mail-Muster prüft? Wir wissen, dass E-Mail-Adressen in verschiedenen Regionen sehr unterschiedlich sein können, z. B. in Großbritannien und Australien endet es normalerweise mit .co.uk o .com.au also habe ich versucht, auch diese abzudecken und auch zu prüfen, ob die Zeichenkette, die an die Funktion übergeben wird, etwa so aussieht:

var isEmail = function(str) {
  return typeof str==='string' && /^[\w+\d+._]+\@[\w+\d+_+]+\.[\w+\d+._]{2,8}$/.test(str);
}

und prüfen Sie, ob es sich um eine E-Mail wie unten handelt:

isEmail('alex@example.com'); //true
isEmail('alireza@test.co.uk'); //true
isEmail('peter.example@yahoo.com.au'); //true
isEmail('alex@example.com'); //true
isEmail('peter_123@news.com'); //true
isEmail('hello7___@ca.com.pt'); //true
isEmail('example@example.co'); //true
isEmail('hallo@example.coassjj#sswzazaaaa'); //false
isEmail('hallo2ww22@example....caaaao'); //false

0 Stimmen

Was passiert mit alireza@test.uk ou phil.h\@\@cked+liked~it@haacked.com ?

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