Wie zur Validierung von nicht-Englisch (UTF-8) codierten E-Mail-Adresse in Javascript und PHP?
Teil einer website, die ich bin derzeit arbeiten, enthält die Registrierung, wo Benutzer müssen Ihre E-Mail-Adresse. Gerade vor kurzem wurde mir bewusst, dass nicht-ascii-domains möglich sind (also E-Mail).
Mein backend ist utf-8-kodierten MySQL, wohin ich gehe davon aus, dass jeder Benutzer (mit unterschiedlichen locales) sollte in der Lage sein, um geben Sie Ihre E-Mail, aber nicht wissen, wie Sie überprüfen diese Art von E-Mail-Adresse.
Ich bin aktuell testen von jquery-tools und es überprüft, die englische E-Mail-Adresse korrekt, aber Fehler bei der überprüfung nicht-ascii-E-Mail. Auch ich muss gleich auf server-Seite mit php. Gibt es einen regulären Ausdruck, der überprüfen kann, ob diese Art von E-Mail-Adresse?
Ich habe dies ausprobiert, aber es scheitert in der jquery-tools (das ist nur Beispiel für die demo, ich verstehe das nicht zu)
闪闪发光@闪闪发光.com
Auch was wird passieren, wenn Sie geben Sie Ihre englischen E-Mail-Adresse ([email protected] mit eigenen IME. Können diese validiert werden, mit aktuellen regulären Ausdruck haben wir für das englische E-mail-Validierung. Derzeit habe ich keine sorgen zu machen, wenn die E-Mail existieren nicht.
Dank
- Sie können
\p{L}
match any unicode-Zeichen. - Mit deinem Beispiel, einfach nur gepostet, eine Antwort!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen zu validieren E-Mail-Adressen sind möglicherweise nicht eine gute Idee. Die Spezifikationen (RFC5321, RFC5322) erlauben so viel Flexibilität, dass die Validierung mit regulären Ausdrücken ist buchstäblich unmöglich und Validierung mit eine Funktion ist eine Menge Arbeit. Das Ergebnis ist, dass die meisten E-Mail-Validierung der Systeme am Ende die Ablehnung einer großen Anzahl von gültigen E-Mail-Adressen, viel um die Unannehmlichkeiten für den Benutzer. (Mit Abstand das am häufigsten verwendete Beispiel ist nicht erlaubt, die
+
Charakter.)Ist es wahrscheinlicher, dass der Benutzer (versehentlich oder absichtlich) geben Sie eine falsche E-Mail-Adresse als ungültig, also eigentlich die Validierung ist sehr viel Arbeit für sehr wenig nutzen, mit den möglichen Kosten, wenn Sie es tun falsch.
Ich würde empfehlen, dass Sie überprüfen Sie einfach die Anwesenheit einer
@
Charakter auf dem client und senden Sie eine Bestätigungs-E-Mail, um zu überprüfen; es ist der praktischste Weg, um dies zu überprüfen und es bestätigt, dass die Adresse korrekt ist, als auch."hi"\ ~e^ery!@myhost
wird nicht kommen, bis zu oft.Seit PHP 5.2 hat ein build-in-Validierung für E-Mail-Adressen. Aber ich bin mir nicht sicher, ob es funktioniert für UFT-8 kodierte strings:
In der original-PHP-source-code finden Sie die reg-exp für die Validierung von E-Mail, dies kann verwendet werden, für die manuelle Validierung bei der Verwendung von PHP < 5.2.
Update
idn_to_ascii()
kann verwendet werden, um die "Convert domain name to IDNA ASCII-form." Die dann validiert werden können mitfilter_var($email, FILTER_VALIDATE_EMAIL);
Angeboten Mario, spielen Sie ein bisschen herum, ich kam mit der folgenden regex zur Validierung von nicht-standard-E-Mail-Adresse:
Wäre es überprüfen, die korrekte E-Mail-Adresse mit allen Arten von Unicode-Zeichen, mit TLD Einschränkungen aus 2 bis 63 Zeichen.
Bitte überprüfen Sie es und lassen Sie mich wissen, wenn es keine Mängel.
Beispiel Online
einer reg-exp könnte so etwas wie dieses:
.microsoft
im Einsatz sein, bevor zu lang. Auch ist es möglich, für die Leerzeichen enthalten gültige E-Mail-Adressen, wenn Sie richtig escaped.Habe diese Idee von Javascript-tutorial-Seite. Es ist einfach, aber es funktioniert für mich, ohne sich Gedanken über die Komplexität reguläre Ausdrücke und unicode-standards.
Client-seitige Validierung
Serverseitige Validierung
Obwohl es immer noch einige Schlupflöcher, ich denke, der Benutzer wird nicht herumalbern mit diesem Zeug. Auch die eigentliche Validierung ist requierd für schwere Sachen, wie vorgeschlagen, durch 'Jeremy Banken.
Hoffe, dass dies hilfreich sein, für jemand anderen zu.
Dank und Grüße an alle
Zu diesem Thema, die ich mochte auf dieser Seite so viel, dass ich bis ein blog Verfügbarmachen von Websites mit der Validierung falsch (Beiträge gerne entgegen - lassen Sie sich nicht deins drauf sein!).
Soweit mit regexes gehen, diejenigen, die sagen, "es ist falsch", sind in der Regel leicht auf alternativen, und TBH-Validierung, um den letzten Buchstaben des RFC ist nicht wirklich so wichtig -, zum Beispiel während
noddy+!#$%&'*-/=?+_{}|[email protected]
ist eine perfekt gültige Adresse vorhanden ist, ist es nicht allzu abwegig zu verwerfen ist es gegeben, dass ein überraschend großer Anteil der user kann nicht selbst geben Sie "hotmail" richtig. Einige domains sind auch sehr restriktiv, die auf user-Namen sowieso, vor allem hotmail. Also bin ich dafür regexes, die nachweislich vernünftig, und meine Lieblings-Quelle für, das ist auf dieser Seite, aber ich weiß nicht, wie Ihre aktuelle JS 'Gewinner', und es würde helfen, wenn Sie einen öffentlichen test-Seite.jQuery validate plugin verwendet dieser regex das ist interessant aufgebaut, sehr ähnlich im Stil (aber kleiner!) der ex-parrot eine (eigentlich mein ISP!) verbunden durch @powtac .
was ist über etwas so: