167 Stimmen

Was sind bewährte Methoden zur Validierung von E-Mail-Adressen auf iOS 2.0?

Was ist der sauberste Weg, um eine E-Mail-Adresse zu validieren, die ein Benutzer auf iOS 2.0 eingibt?

HINWEIS: Dies ist eine historische Frage, die spezifisch für iOS 2.0 ist, und aufgrund ihres Alters und wie viele andere Fragen damit verknüpft sind, kann sie nicht entfernt und DARF NICHT in eine "moderne" Frage geändert werden.

0 Stimmen

Ich suche nach einer Kakao-Lösung. Ich verstehe die Gültigkeit von E-Mails und die Regeln für die Validierung von E-Mails. Da RegEx jedoch auf Cocoa Touch nicht einfach zugänglich ist, suche ich nach einer Cocoa Touch-Lösung zur Validierung. Nicht eine Liste der Regeln zur Validierung.

0 Stimmen

Bisher ist der beste Code-Vorschlag, den ich gefunden habe, die Verwendung von RegExKitLite und regulären Ausdrücken. Glücklicherweise ist es weniger schmerzhaft als es klingt.

0 Stimmen

Siehe Kommentare unten zur Verwendung von NSRegularExpression für Apps, die kein Betriebssystem unter 4.0 unterstützen.

354voto

catlan Punkte 24696

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

Ich empfehle einen echten Parser-Ansatz wie MKEmailAddress.

Als schnelle Lösung mit regulären Ausdrücken 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];
}

20voto

Trey Punkte 10770

Lesen Sie das RFC. Fast jeder, der denkt, dass er weiß, wie man eine E-Mail-Adresse parsen/säubern/validieren kann, liegt falsch.

https://www.rfc-editor.org/rfc/rfc2822 Abschnitt 3.4.1 ist sehr nützlich. Beachten Sie

dtext           =       NO-WS-CTL /     ; Nicht-Weißraum-Steuerzeichen

                        %d33-90 /       ; Der Rest der US-ASCII
                        %d94-126        ; Zeichen, die nicht "\[", "\]", oder "\\"

Ja, das bedeutet +, ', etc sind alle erlaubt.

17voto

Marcus S. Zarra Punkte 46405

Die beste Lösung, die ich bisher gefunden habe (und die ich schließlich verwendet habe), ist RegexKitLite zum Projekt hinzuzufügen, was den Zugriff auf reguläre Ausdrücke über NSString-Kategorien ermöglicht.

Es ist ziemlich schmerzlos, es zum Projekt hinzuzufügen, und einmal an Ort und Stelle, wird jede der regulären Ausdrucks-E-Mail-Validierungslogik funktionieren.

10voto

Brandon Yarbrough Punkte 34849

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

99% der E-Mail-Adressen sehen so aus: bob.smith@foo.com oder fred@bla.edu

Es ist jedoch technisch legal, eine E-Mail-Adresse wie diese zu haben: f!#$%&'*+-/=?^_{|}~"ha!"@com

Es gibt wahrscheinlich nur eine Handvoll gültiger E-Mails in der Welt für Top-Level-Domains, und fast niemand verwendet die meisten dieser anderen Zeichen (insbesondere Anführungszeichen und Backticks), daher möchten Sie vielleicht davon ausgehen, dass dies alles ungültige Aktionen sind. Aber Sie sollten dies als bewusste Entscheidung tun.

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

Dieser wird wahrscheinlich mit fast jeder E-Mail-Adresse übereinstimmen.

7voto

Srikar Doddi Punkte 15275

Während der Fokus auf regulären Ausdrücken gut ist, handelt es sich dabei jedoch nur um einen ersten und notwendigen Schritt. Es gibt andere Schritte, die auch für eine gute Validierungsstrategie berücksichtigt werden müssen.

Zwei Dinge, die mir sofort einfallen, sind :

  1. DNS-Validierung, um sicherzustellen, dass die Domain tatsächlich existiert.

  2. Nach der DNS-Validierung können Sie auch eine SMTP-Validierung durchführen. Senden Sie einen Aufruf an den SMTP-Server, um zu sehen, ob der Benutzer tatsächlich existiert.

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

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