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.

46voto

adnam Punkte 178

Cal Henderson (Flickr) schrieb einen Artikel mit dem Titel _Parsing von E-Mail-Adressen in PHP_ und zeigt, wie man eine korrekte RFC (2)822-konforme Analyse von E-Mail-Adressen durchführt.

Sie können den Quellcode auch unter PHP , Python und Ruby, die Creative Commons lizenziert .

0 Stimmen

Es sagte mir, dass a@b war gültig

3 Stimmen

@dsdsdsdsdsd Weil a@b gültig ist... in diesem Fall b ist die Top-Level-Domain.

44voto

Kon Punkte 26399

Ich mache mir nie die Mühe, einen eigenen regulären Ausdruck zu erstellen, denn die Wahrscheinlichkeit ist groß, dass jemand anderes bereits eine bessere Version entwickelt hat. Ich verwende immer regexlib um eine nach meinem Geschmack zu finden.

0 Stimmen

Nette Website, aber es ist etwas seltsam, dass der eingebaute E-Mail-Spamschutz einige Muster teilweise ausblendet. Vor allem solche, die sich auf den E-Mail-Abgleich beziehen :D

1 Stimmen

Dieser Link ist eine Suchanfrage, z. B. "Suchergebnisse: 4128 reguläre Ausdrücke gefunden." . Welches ist es im Einzelnen? Wie wählen Sie aus?

43voto

spig Punkte 1647

Ein einfacher regulärer Ausdruck, der zumindest keine gültige E-Mail-Adresse zurückweisen würde, wäre die Überprüfung auf etwas, gefolgt von einem @-Zeichen und dann etwas, gefolgt von einem Punkt und mindestens 2 etwas. Es wird nichts abgelehnt, aber nach Durchsicht der Spezifikation kann ich keine E-Mail finden, die gültig wäre und abgelehnt würde.

E-Mail =~ /.+@[^@]+\.[^@]{2,}$/

5 Stimmen

Das ist es, wonach ich gesucht habe. Nicht sehr restriktiv, aber stellt sicher, dass es nur 1 @ gibt (da wir eine Liste analysieren und sicherstellen wollen, dass keine Kommas fehlen). Zu Ihrer Information: Sie können ein @ auf der linken Seite haben, wenn es in Anführungszeichen steht: Gültige_E-Mail-Adressen aber das ist eher ein Randthema.

3 Stimmen

Nachdem ich es benutzt hatte, stellte ich fest, dass es nicht richtig funktionierte. /^[^@]+@[^@]+\.[^@]{2}[^@]*$/ sucht tatsächlich nach 1 @ Zeichen. Ihre Regex lässt mehrere durch, weil das .* am Ende steht.

2 Stimmen

Das stimmt. Ich versuche nicht, alle ungültigen E-Mails abzulehnen, sondern nur zu verhindern, dass eine gültige E-Mail-Adresse abgelehnt wird.

39voto

PhiLho Punkte 39496

Es gibt keine einzige, die wirklich brauchbar ist. Ich diskutiere einige Probleme in meinem Antwort auf Gibt es eine PHP-Bibliothek zur Validierung von E-Mail-Adressen? wird es auch in Ist die Erkennung von E-Mail-Adressen mit regulären Ausdrücken schwierig? .

Kurz gesagt: Erwarten Sie nicht, dass eine einzige, brauchbare Regex ihre Aufgabe erfüllt. Und die beste Regex prüft die Syntax, nicht die Gültigkeit einer E-Mail ( jhohn@example.com ist korrekt, aber sie wird wahrscheinlich abprallen...).

0 Stimmen

Korrigieren Sie mich, wenn ich falsch liege, aber ich glaube, dass PHP PCRE-Muster verwendet. Wenn dem so ist, sollten Sie in der Lage sein, etwas Ähnliches zu erstellen wie Abigail's RFC 5322 Muster .

0 Stimmen

@tchrist: Ich bin nicht sicher, ob PCRE zu dieser Syntax aufgeschlossen hat (was ich feststelle). Wenn ja, nicht sicher, ob PHP's PCRE hat aufgeholt, um diese Version von PCRE... Nun, wenn ich diese Syntax richtig verstehe, können Sie auch einen PEG-Parser verwenden, der sowieso viel klarer und vollständiger ist als ein Regex.

0 Stimmen

PCRE tiene aufgeholt, aber vielleicht hat PHP nicht mit PCRE gleichgezogen.

31voto

chaos Punkte 118918

Sie können die vom jQuery Validation Plugin verwendete Methode verwenden:

/^((([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])))\.?$/i

0 Stimmen

Dies scheint gute Arbeit zu leisten. Es erlaubt: a-b'c_d.e@f-g.h war aber in der Lage, die unangemessenen Varianten zu erkennen, wie z. B. a-b'c_d.@f-g.h y a-b'c_d.e@f-.h

2 Stimmen

Haben Sie eine Referenz dafür?

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