4146 Stimmen

Wie kann ich eine E-Mail-Adresse mithilfe eines regulären Ausdrucks überprüfen?

Im Laufe der Jahre habe ich langsam eine regulärer Ausdruck die die Gültigkeit Die meisten E-Mail-Adressen korrekt, vorausgesetzt, sie verwenden keine IP-Adresse als Serverteil.

Ich verwende es in mehreren PHP-Programmen, und es funktioniert die meiste Zeit. Von Zeit zu Zeit werde ich jedoch von jemandem kontaktiert, der Probleme mit einer Website hat, die es verwendet, und ich muss dann einige Anpassungen vornehmen (vor kurzem habe ich festgestellt, dass ich keine vierstelligen Buchstaben zulasse TLDs ).

Was ist der beste reguläre Ausdruck, den Sie haben oder gesehen haben, um E-Mails zu validieren?

Ich habe mehrere Lösungen gesehen, die Funktionen verwenden, die mehrere kürzere Ausdrücke verwenden, aber ich hätte lieber einen langen komplexen Ausdruck in einer einfachen Funktion als mehrere kurze Ausdrücke in einer komplexeren Funktion.

10 Stimmen

Der Regex, der überprüfen kann, ob eine IDNA korrekt formatiert ist, passt nicht in Stackexchange. (die Regeln für die Kanonisierung sind sehr umständlich und eignen sich besonders schlecht für die Regex-Verarbeitung)

13 Stimmen

0 Stimmen

Die Regexe können sein variabel denn in manchen Fällen kann eine E-Mail ein Leerzeichen enthalten, in anderen Fällen darf sie keine Leerzeichen enthalten.

4voto

Simon_Weaver Punkte 129442

So gut wie jeder reguläre Ausdruck, den ich kenne - einschließlich der von Microsoft verwendeten - lässt Folgendes nicht zu gültig E-Mail, um durchzukommen: simon-@hotmail.com

Ich hatte gerade einen echten Kunden mit einer E-Mail-Adresse in diesem Format, der keine Bestellung aufgeben konnte.

Ich habe mich für Folgendes entschieden:

  • Ein minimaler regulärer Ausdruck, der keine falschen Negative enthält. Verwenden Sie alternativ den MailAddress Konstruktor mit einigen zusätzlichen Prüfungen (siehe unten):
  • Überprüfung auf häufige Tippfehler .cmo o .gmial.com und bittet um Bestätigung "Sind Sie sicher, dass dies Ihre richtige E-Mail-Adresse ist? Es sieht so aus, als ob hier ein Fehler vorliegt." Erlauben Sie dem Benutzer, das Getippte zu akzeptieren, wenn er sich sicher ist.
  • Bearbeitung von Bounces, wenn die E-Mail tatsächlich gesendet wird, und manuelle Überprüfung auf offensichtliche Fehler.

try
{
    var email = new MailAddress(str);

    if (email.Host.EndsWith(".cmo"))
    {
        return EmailValidation.PossibleTypo;
    }

    if (!email.Host.EndsWith(".") && email.Host.Contains("."))
    {
        return EmailValidation.OK;
    }
}
catch
{
    return EmailValidation.Invalid;
}

1 Stimmen

Diese Antwort ist irreführend und hat nichts mit der Frage zu tun. Benutzern die Eingabe einer falschen E-Mail zu erlauben, ist eine geschäftliche Entscheidung, die Frage bezieht sich auf die Validierung mit Regex.

1 Stimmen

Die erste Antwort auf diesen Beitrag passt gut zu simon-@hotmail.com.

0 Stimmen

Welche Programmiersprache? C# ? Java ? Etwas anderes?

4voto

Dave Black Punkte 6469

Según RFC 2821 y RFC 2822 Der lokale Teil der E-Mail-Adressen kann jedes dieser ASCII-Zeichen verwenden:

  1. Großbuchstaben und Kleinbuchstaben
  2. Die Ziffern 0 bis 9
  3. Die Zeichen, !#$%&'*+-/=?^_`{|}~
  4. Das Zeichen ".", sofern es nicht das erste oder letzte Zeichen im Lokalteil ist.

Spielt:

  • a&d@somedomain.com
  • a*d@somedomain.com
  • a/d@somedomain.com

Nicht-Übereinstimmungen:

  • .abc@somedomain.com
  • abc.@somedomain.com
  • a>b@somedomain.com

Für eine, die mit RFC 2821 und 2822 konform ist, können Sie verwenden:

^((([!#$%&'*+\-/=?^_`{|}~\w])|([!#$%&'*+\-/=?^_`{|}~\w][!#$%&'*+\-/=?^_`{|}~\.\w]{0,}[!#$%&'*+\-/=?^_`{|}~\w]))[@]\w+([-.]\w+)*\.\w+([-.]\w+)*)$

E-Mail - Konform mit RFC 2821, 2822

4voto

cbp Punkte 24483

Wir haben verwendet http://www.aspnetmx.com/ seit ein paar Jahren mit einigem Erfolg. Sie können die Ebene wählen, auf der Sie validieren möchten (z. B. Syntaxprüfung, Prüfung auf die Domäne, MX-Einträge oder die eigentliche E-Mail).

Bei Front-End-Formularen überprüfen wir in der Regel, ob die Domäne existiert und die Syntax korrekt ist, und dann führen wir eine strengere Überprüfung durch, um unsere Datenbank zu bereinigen, bevor wir Massenmails verschicken.

0 Stimmen

Der Link ist defekt (Zeitüberschreitung). "Verbindung kann nicht hergestellt werden. Bei der Verbindung zu www.aspnetmx.com ist ein Fehler aufgetreten."

0 Stimmen

Diese Frage wurde ursprünglich im Jahr 2008 beantwortet :-) Wo ist die Zeit geblieben....

4voto

Nazmul Hasan Punkte 6480

Dies ist eine der Regexes für E-Mail:

^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$

0 Stimmen

Es sieht aus wie Leitungsrauschen. Haben Sie eine Erklärung und/oder eine Referenz dafür?

4voto

Jay Zeng Punkte 1427

Niemand hat die Frage der Lokalisierung erwähnt ( i18n ). Was ist, wenn Sie Kunden aus der ganzen Welt haben?

Sie müssen dann Ihre Regex pro Land/Gebiet untergliedern, was dazu führt, dass Entwickler ein großes Wörterbuch oder eine Konfiguration erstellen. Die Erkennung der Browser-Spracheinstellung der Benutzer kann ein guter Ausgangspunkt sein.

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