wake-up-neo.net

Was sind bewährte Methoden für die Überprüfung von E-Mail-Adressen unter iOS 2.0?

Was ist die sauberste Methode zum Überprüfen einer E-Mail-Adresse, die ein Benutzer unter iOS 2.0 eingibt?

NOTE: Dies ist eine historische Frage, die spezifisch für iOS 2.0 ist. Aufgrund ihres Alters und der Anzahl der damit verknüpften Fragen kann sie nicht zurückgezogen werden und darf NICHT in eine "moderne" Frage umgewandelt werden.

167
Marcus S. Zarra

Die beste Lösung, die ich bisher gefunden habe (und die, mit der ich am Ende gegangen bin), ist das Hinzufügen von RegexKitLite zu dem Projekt, das über NSString-Kategorien Zugriff auf reguläre Ausdrücke bietet.

Es ist ziemlich schmerzlos, das Projekt hinzuzufügen, und sobald die E-Mail-Validierungslogik für reguläre Ausdrücke vorhanden ist, wird sie funktionieren.

17
Marcus S. Zarra

Die Antwort auf Die Verwendung eines regulären Ausdrucks zur Validierung einer E-Mail-Adresse erklärt ausführlich, dass die in RFC 5322 angegebene Grammatik zu kompliziert ist für primitive reguläre Ausdrücke.

Ich empfehle einen echten Parser-Ansatz wie MKEmailAddress .

Als schnelle Lösung für reguläre Ausdrücke sehen Sie diese Modifikation von DHValidation :

- (BOOL) validateEmail: (NSString *) candidate {
    NSString *emailRegex =
@"(?:[a-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[a-z0-9!#$%\\&'*+/=?\\^_`{|}"
@"~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\"
@"x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-"
@"z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5"
@"]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-"
@"9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21"
@"-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES[c] %@", emailRegex]; 

    return [emailTest evaluateWithObject:candidate];
}
354
catlan

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 

 dtext = NO-WS-CTL /; Nicht-Leerzeichen-Steuerelemente 

 % d33-90 /; Der Rest des US-ASCII 
 % d94-126; Zeichen ohne "[", 
 ; "]", oder "\"

Ja, das bedeutet +, 'usw. sind alle echt. 

20
Trey

Ein guter Anfang ist zu entscheiden, was Sie als E-Mail-Adresse akzeptieren möchten und nicht?

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!" @ Com

Es gibt wahrscheinlich weltweit nur eine Handvoll gültiger E-Mails für Top-Level-Domains, und fast niemand verwendet die meisten dieser anderen Zeichen (vor allem Anführungszeichen und Backticks). Sie sollten also davon ausgehen, dass dies alles ungültige Dinge sind. Aber Sie sollten dies als bewusste Entscheidung tun.

Darüber hinaus tun Sie, was Paul sagt, und versuchen Sie, die Eingabe einem regulären Ausdruck wie folgt zuzuordnen: ^ [A-Z0-9 ._% + -] + @ [A-Z0-9 .-] +. [AZ] { 2,} $

Diese wird mit der E-Mail-Adresse von allen übereinstimmen.

10

Diese Funktion ist einfach und überprüft die E-Mail-Adresse noch gründlicher. Gemäß RFC2822 darf eine E-Mail-Adresse beispielsweise nicht zwei Punkte in einer Zeile enthalten, z. B. vorname..nachname @ domain..com

Es ist auch wichtig, Anker in regulären Ausdrücken zu verwenden, wie in dieser Funktion dargestellt. Ohne Ankern gilt die folgende E-Mail-Adresse als gültig: first; name) [email protected] (blah, da der Abschnitt [email protected] gültig ist, first; name) um ignoriert wird der Anfang und (blah am Ende. Anker zwingen die Engine für reguläre Ausdrücke, die gesamte E-Mail zu bestätigen.

Diese Funktion verwendet NSPredicate, das in iOS 2 nicht vorhanden ist. Leider kann es dem Fragesteller nicht helfen, wird aber hoffentlich anderen mit neueren Versionen von iOS helfen. Die regulären Ausdrücke in dieser Funktion können in iOS 2 jedoch weiterhin auf RegExKitLite angewendet werden. Für Benutzer von iOS 4 oder höher können diese regulären Ausdrücke mit NSRegularExpression implementiert werden.

- (BOOL)isValidEmail:(NSString *)email
{
    NSString *regex1 = @"\\A[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,4}\\z";
    NSString *regex2 = @"^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*";
    NSPredicate *test1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex1];
    NSPredicate *test2 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex2];
    return [test1 evaluateWithObject:email] && [test2 evaluateWithObject:email];
}

Siehe E-Mail-Adresse mit regulärem Ausdruck in Objective-C überprüfen .

7
Geek

Der Fokus auf reguläre Ausdrücke ist zwar gut, aber dies ist nur ein erster und notwendiger Schritt. Es gibt andere Schritte, die auch für eine gute Validierungsstrategie berücksichtigt werden müssen.

Zwei Dinge auf meinem Kopf sind:

  1. DNS-Überprüfung, um sicherzustellen, dass die Domäne tatsächlich vorhanden ist.

  2. Nach der DNS-Validierung können Sie auch eine SMTP-Validierung durchführen. Ein Anruf an den SMTP-Server an .__ senden, ob der Benutzer tatsächlich existiert.

Auf diese Weise können Sie alle Arten von Benutzerfehlern abfangen und sicherstellen, dass es sich um eine gültige E-Mail handelt.

7
Srikar Doddi
NSString *emailString = textField.text; **// storing the entered email in a string.** 
**// Regular expression to checl the email format.** 
NSString *emailReg = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",emailReg]; 
if (([emailTest evaluateWithObject:emailString] != YES) || [emailStringisEqualToString:@""]) 
{ 
UIAlertView *loginalert = [[UIAlertView alloc] initWithTitle:@" Enter Email in" message:@"[email protected] format" delegate:self 
cancelButtonTitle:@"OK" otherButtonTitles:nil]; 

enter code here

[loginalert show]; 
[loginalert release]; 
} 
If email is invalid, it will remind the user with an alert box. 
Hope this might be helpful for you all. 
6
hirak

Ich habe festgestellt, dass die Verwendung eines regulären Ausdrucks sehr gut zum Überprüfen einer E-Mail-Adresse funktioniert. 

Der Hauptnachteil von regulären Ausdrücken ist natürlich die Wartbarkeit, also Kommentare, die Sie noch nie zuvor kommentiert haben. Ich verspreche dir, wenn du es nicht tust, wünschst du es, wenn du nach ein paar Wochen wieder zum Ausdruck kommst.

Hier ist ein Link zu einer guten Quelle, http://www.regular-expressions.info/email.html .

4
Paul Redman

Den Dreck ausgraben, aber ich bin gerade auf SHEmailValidator gestoßen, der einen perfekten Job macht und ein Nice-Interface hat.

3
Cyrille

Viele Websites bieten RegExes, aber Sie sollten sich gut damit auskennen und überprüfen, ob das, was Sie möchten, Ihren Anforderungen im offiziellen RFC für E-Mail-Adressformate entspricht.

Für das Erlernen von RegEx können interpretierte Sprachen eine große Vereinfachung und Testumgebung darstellen. Rubular basiert auf Ruby, ist aber eine gute Möglichkeit, um Folgendes zu testen und zu überprüfen: http://www.rubular.com/

Darüber hinaus sollten Sie die neueste Ausgabe des O'Reilly-Buchs "Mastering Regular Expressions .." erwerben. Sie möchten die Zeit nutzen, um die ersten 3 oder 4 Kapitel zu verstehen. Alles, was danach kommt, wird Know-how für die optimierte RegEx-Nutzung aufbauen.

Oft sind eine Reihe kleinerer, einfacher zu handhabender RegExes einfacher zu warten und zu debuggen.

1
user656483

Hier ist eine Erweiterung von String, die eine E-Mail in Swift überprüft.

extension String {

    func isValidEmail() -> Bool {
        let stricterFilter = false
        let stricterFilterString = "^[A-Z0-9a-z\\._%+-][email protected]([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$"
        let laxString = "^[email protected]([A-Za-z0-9-]+\\.)+[A-Za-z]{2}[A-Za-z]*$"
        let emailRegex = stricterFilter ? stricterFilterString : laxString
        let emailTest = NSPredicate(format: "SELF MATCHES %@", emailRegex)
        return emailTest.evaluate(with: self)
    }
}

Aus der Antwort kopiert nach: Überprüfen Sie, ob eine E-Mail-Adresse unter iOS gültig ist.

0
grez