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.

10voto

Renish Gotecha Punkte 1702

In meinem Fall wollte ich Folgendes vermeiden ~ et # Deshalb habe ich die andere Lösung :

function validEmail(email){
  const regex = /^((?!\.)[\w\-_.]*[^.])(@\w+)(\.\w+(\.\w+)?[^.\W])$/;
  return regex.test(email);
}

function validEmail(email){
  const regex = /^((?!\.)[\w\-_.]*[^.])(@\w+)(\.\w+(\.\w+)?[^.\W])$/;
  return regex.test(email);
}

const emails = [
'pio_pio@factory.com',
'~pio_pio@factory.com',
'pio_~pio@factory.com',
'pio_#pio@factory.com',
'pio_pio@#factory.com',
'pio_pio@factory.c#om',
'pio_pio@factory.c*om',
'pio^_pio@factory.com'
]

for(const email of emails){
  document.write(email+' : '+validEmail(email)+'</br>');
}

0 Stimmen

Diese Antwort - und einige andere in diesem Thread - kommen nicht ohne den Bindestrich aus. Soweit ich sehen kann (September 2021), stellt dies in Browsern - zumindest in den Webkit-Varianten - kein Problem dar. Dies könnte sich jedoch ändern. Zum Zeitpunkt des Verfassens dieses Artikels kompiliert PHP7.3 die Regex nicht, ohne den Bindestrich zu escapen. Machen Sie Ihren Code auf der Browserseite zukunftssicher, indem Sie den Bindestrich escapen \- und nicht nur - .

9voto

Ebrahim Punkte 1524

Die meisten Antworten hier sind nicht linter-freundlich, es ist ein Chaos! Einige von ihnen sind auch veraltet! Nach viel Zeitaufwand habe ich mich für eine externe Bibliothek namens email-validator , installieren Sie es einfach per npm und importieren/fordern Sie es in Ihrem eigenen Projekt:

https://www.npmjs.com/package/email-validator

//NodeJs
const validator = require("email-validator");
validator.validate("test@email.com"); // true

//TypeScript/JavaScript
import * as EmailValidator from 'email-validator';
EmailValidator.validate("test@email.com"); // true

0 Stimmen

Es ist zwar nicht die Antwort auf die Frage, aber es hat mir geholfen und mir Zeit erspart. Dieses E-Mail-Validierungspaket scheint rund eine halbe Million anderer (Downloads) pro Woche zu helfen. Es ist also erwähnenswert und verdient ein paar Upvotes.

8voto

Prince Dholakiya Punkte 3283

Wie man besondere reguläre Ausdrücke in Android oder Java schreibt.

1) USER_NAME = "^[A-Za-z0-9_-]{min number of character,max number of character}$";

2) TELEPHONE = "(^\\+)?[0-9()-]*";

3) TELEPHONE_OPTIONAL = "^($|(^\\+)?[0-9()-]*)$";

4) EMAIL = "[a-zA-Z0-9_\\.\\+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-\\.]+";

5) EMAIL_OPTIONAL = "^($|[a-zA-Z0-9_\\.\\+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-\\.]+)$";

6) WEB_URL = "^($|(http:\\/\\/|https:\\/\\/)?(www.)?([a-zA-Z0-9]+).[a-zA-Z0-9]*.[a-z]{3}.?([a-z]+)?)$";

7) WEB_URL_YOUTUBE_BE = "https?\\:\\/\\/(www\\.)?youtu(\\.)?be(\\.com)?\\/.*(\\?v=|\\/v\\/)?[a-zA-Z0-9_\\-]+";

8) POSTAL_ADDRESS = "[a-zA-Z\\d\\s\\-\\,\\#\\.\\+]+";

9) FIELD_NOT_EMPTY = "[^\\s]*";

10) PINCODE = "^([0-9]{6})?$";

11) IFSC_CODE = "^[^\\s]{4}\\d{7}$";

12) SWIFT_CODE = "^([0-9]{10})?$";

13) PINCODE = "^([0-9]{6})?$";

0 Stimmen

Die Frage bezieht sich auf JavaScript und nicht auf Java.

8voto

user1843640 Punkte 3115

Ich ziehe es vor, es einfach zu halten und meine Benutzer zufrieden zu stellen. Außerdem bevorzuge ich Code, der leicht zu verstehen ist. RegEx ist das nicht.

function isValidEmail(value) {
    const atLocation = value.lastIndexOf("@");
    const dotLocation = value.lastIndexOf("."); 
    return (
        atLocation > 0 &&
        dotLocation > atLocation + 1 &&
        dotLocation < value.length - 1
    );
};
  • Ermittelt die Position des letzten "@" und des letzten "."
  • Vergewissern Sie sich, dass das "@" nicht das erste Zeichen ist (es steht etwas davor).
  • Achten Sie darauf, dass das "." nach dem "@" steht und dass mindestens ein Zeichen dazwischen ist.
  • Achten Sie darauf, dass nach dem "." mindestens ein einzelnes Zeichen steht.

Werden dadurch ungültige E-Mail-Adressen durchgelassen? Sicher, aber ich glaube nicht, dass man viel mehr für eine gute Benutzererfahrung braucht, die es erlaubt, eine Schaltfläche zu aktivieren/deaktivieren, eine Fehlermeldung anzuzeigen, usw. Sie wissen nur dann sicher, dass eine E-Mail-Adresse gültig ist, wenn Sie versuchen, eine E-Mail an diese Adresse zu senden.

0 Stimmen

Dies schlägt bei E-Mails fehl, die mit einem Kommentar enden, der ein @ enthält, z. B. "elldffs@mydomain.kjfdij (this is @ comment)", was eine gültige E-Mail ist.

7voto

Neil Thompson Punkte 6256

Der reguläre Ausdruck, der von Microsoft in ASP.NET MVC es

/^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/

Das poste ich hier, falls es fehlerhaft ist - obwohl es für meine Bedürfnisse immer perfekt war.

1 Stimmen

Erlaubt keine +'s im Namensteil der E-Mail.

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