Was ist der sauberste Weg, um eine E-Mail-Adresse zu überprüfen, die ein Benutzer unter iOS 2.0 eingibt?
HINWEIS : Dies ist eine historische Frage, die spezifisch für iOS 2.0 ist. Aufgrund ihres Alters und der Anzahl der damit verbundenen anderen Fragen kann sie nicht zurückgezogen werden und darf NICHT in eine "moderne" Frage geändert werden.
cocoa-touch
email-validation
iphone-sdk-2
Marcus S. Zarra
quelle
quelle
NSDataDetector
, um E-Mail-Adressen zu validieren: stackoverflow.com/a/23547905/257550Antworten:
Die Antwort auf Verwenden eines regulären Ausdrucks zum Überprüfen einer E-Mail-Adresse erklärt ausführlich, dass die in RFC 5322 angegebene Grammatik für primitive reguläre Ausdrücke zu kompliziert ist.
Ich empfehle einen echten Parser-Ansatz wie MKEmailAddress .
Als schnelle Lösung für reguläre Ausdrücke siehe diese Modifikation von DHValidation :
quelle
@"[^@]+@[^.@]+(\\.[^.@]+)+"
Wenn Sie eine E-Mail-Adresse überprüfen müssen, senden Sie eine Nachricht an diese und prüfen Sie, ob sie erfolgreich ist. Sie werden es niemals mit einem Regex allein mit irgendeiner Genauigkeit überprüfen. Es ist daher am besten, nicht auf Benutzer zu pissen und Anmeldungen aufgrund eines unnötig strengen Regex zu verlieren.Lesen Sie den RFC. Fast jeder, der glaubt zu wissen, wie man eine E-Mail-Adresse analysiert / bereinigt / validiert, ist falsch.
http://tools.ietf.org/html/rfc2822 Abschnitt 3.4.1 ist sehr nützlich. Beachten
Ja, das bedeutet, dass +, 'usw. alle legitim sind.
quelle
Die beste Lösung, die ich bisher gefunden habe (und die ich letztendlich gefunden habe), ist das Hinzufügen von RegexKitLite zum Projekt, das den Zugriff auf reguläre Ausdrücke über NSString-Kategorien ermöglicht.
Es ist ziemlich einfach, das Projekt zu erweitern, und sobald es eingerichtet ist, funktioniert jede E-Mail-Validierungslogik für reguläre Ausdrücke.
quelle
Ein guter Anfang ist zu entscheiden, was Sie tun und was Sie nicht als E-Mail-Adresse akzeptieren möchten?
99% der E-Mail-Adressen sehen folgendermaßen aus: [email protected] oder [email protected]
Es ist jedoch technisch legal, eine E-Mail-Adresse wie diese zu haben: f
!#$%&'*+-/=?^_
{|} ~ "ha!" @ ComEs gibt wahrscheinlich nur eine Handvoll gültiger E-Mails auf der Welt für Top-Level-Domains, und fast niemand verwendet die meisten dieser anderen Zeichen (insbesondere Anführungszeichen und Backticks). Daher sollten Sie davon ausgehen, dass dies alles ungültige Dinge sind. Aber Sie sollten dies als bewusste Entscheidung tun.
Tun Sie darüber hinaus, was Paulus sagt, und versuchen Sie, die Eingabe einem regulären Ausdruck wie diesem zuzuordnen: ^ [A-Z0-9 ._% + -] + @ [A-Z0-9 .-] +. [AZ] { 2,} $
Dieser wird so ziemlich jeder E-Mail-Adresse entsprechen.
quelle
Der Fokus auf reguläre Ausdrücke ist zwar gut, aber dies ist nur ein erster und notwendiger Schritt. Es gibt andere Schritte, die ebenfalls für eine gute Validierungsstrategie berücksichtigt werden müssen.
Zwei Dinge auf meinem Kopf sind:
DNS-Validierung, um sicherzustellen, dass die Domain tatsächlich vorhanden ist.
Nach der DNS-Validierung können Sie auch eine SMTP-Validierung durchführen. Senden Sie einen Anruf an den SMTP-Server, um festzustellen, ob der Benutzer tatsächlich vorhanden ist.
Auf diese Weise können Sie alle Arten von Benutzerfehlern abfangen und sicherstellen, dass es sich um eine gültige E-Mail handelt.
quelle
Diese Funktion ist einfach und überprüft die E-Mail-Adresse dennoch gründlicher. Beispielsweise darf eine E-Mail-Adresse gemäß RFC2822 nicht zwei Punkte hintereinander enthalten, z. B. Vorname..Nachname @ Domäne..com
Es ist auch wichtig, Anker in regulären Ausdrücken zu verwenden, wie in dieser Funktion gezeigt. Ohne Anker wird die folgende E-Mail-Adresse als gültig angesehen: Vorname; Name) [email protected] (bla, da der Abschnitt [email protected] gültig ist, wobei Vorname ignoriert wird ; Name) am Anfang und (bla am Ende. Anker erzwingen die Engine für reguläre Ausdrücke zur Validierung der gesamten E-Mail.
Diese Funktion verwendet NSPredicate, das in iOS 2 nicht vorhanden ist. Leider hilft es dem Fragesteller möglicherweise nicht, aber hoffentlich hilft es anderen mit neueren Versionen von iOS. Die regulären Ausdrücke in dieser Funktion können jedoch weiterhin auf RegExKitLite in iOS 2 angewendet werden. Und für Benutzer von iOS 4 oder höher können diese regulären Ausdrücke mit NSRegularExpression implementiert werden.
Siehe Überprüfen der E-Mail-Adresse mit regulären Ausdrücken in Objective-C .
quelle
quelle
Ich habe festgestellt, dass die Verwendung eines regulären Ausdrucks zum Überprüfen einer E-Mail-Adresse recht gut funktioniert.
Der Hauptnachteil regulärer Ausdrücke ist natürlich die Wartbarkeit. Kommentieren Sie also, wie Sie es noch nie zuvor getan haben. Ich verspreche Ihnen, wenn Sie dies nicht tun, werden Sie es wünschen, wenn Sie nach ein paar Wochen zum Ausdruck zurückkehren.
Hier ist ein Link zu einer guten Quelle, http://www.regular-expressions.info/email.html .
quelle
Den Dreck ausgraben , aber ich bin gerade auf SHEmailValidator gestoßen, der einen perfekten Job macht und eine schöne Oberfläche hat.
quelle
Viele Websites bieten RegExes an, aber Sie sollten sie gut lernen und verstehen sowie überprüfen, ob das, was Sie möchten, Ihren Anforderungen innerhalb des offiziellen RFC für E-Mail-Adressformate entspricht.
Für das Erlernen von RegEx können interpretierte Sprachen eine große Vereinfachung und Testumgebung sein. Rubular basiert auf Ruby, ist jedoch eine gute Möglichkeit zum schnellen Testen und Überprüfen: http://www.rubular.com/
Kaufen Sie darüber hinaus die neueste Ausgabe des O'Reilly-Buches Mastering Regular Expressions. Sie sollten sich die Zeit nehmen, um die ersten 3 oder 4 Kapitel zu verstehen. Alles danach wird Fachwissen über eine hochoptimierte RegEx-Nutzung aufbauen.
Oft ist eine Reihe kleinerer, einfacher zu verwaltender RegExes einfacher zu warten und zu debuggen.
quelle
Hier ist eine Erweiterung von String, die eine E-Mail in Swift validiert.
Von der Antwort kopiert an: Überprüfen Sie, ob eine E-Mail-Adresse unter iOS gültig ist
quelle
NSPredicate
auf iOS 2.0Sie sollten nicht versuchen, eine E-Mail mit Regex zu validieren. Bei sich ständig ändernden TLDs ist Ihr Validator entweder unvollständig oder ungenau. Stattdessen sollten Sie die Apple-
NSDataDetector
Bibliotheken nutzen, die eine Zeichenfolge verwenden und versuchen, festzustellen, ob Datenfelder (E-Mails, Adressen, Daten usw.) bekannt sind. Apples SDK wird es schwer haben, mit TLDs auf dem neuesten Stand zu bleiben, und Sie können sich von ihren Bemühungen huckepack nehmen !! :) :)Wenn iMessage (oder ein anderes Textfeld) nicht der Meinung ist, dass es sich um eine E-Mail handelt, sollten Sie eine E-Mail in Betracht ziehen.
Ich habe diese Funktion in eine
NSString
Kategorie eingeordnet, daher lautet die Zeichenfolge, die Sie testenself
.oder als schnelle
String
Erweiterungquelle
validate email objective-c
, ist diese Frage das dritte Ergebnis. Einige Dinge im Internet altern nicht. :-)NSDataDetector
gab es in iOS 2.0 NICHT, worum es bei dieser Frage ging.quelle
NSPredicate
war in iOS 2 nicht vorhanden. es wurde erst iOS 3 hinzugefügt.