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.

0voto

InnisBrendan Punkte 1729

Hier ist eine Erweiterung von String, die eine E-Mail in Swift validiert.

extension String {

    func isValidEmail() -> Bool {
        let stricterFilter = false
        let stricterFilterString = "^[A-Z0-9a-z\\._%+-]+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$"
        let laxString = "^.+@([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)
    }
}

Kopiert von der Antwort zu: Überprüfen, ob eine E-Mail-Adresse auf iOS gültig ist

-2voto

Mr. T Punkte 12225

Sie sollten nicht versuchen, Regex zu verwenden, um eine E-Mail zu validieren. Mit sich ständig ändernden TLDs ist Ihr Validator entweder unvollständig oder ungenau. Stattdessen sollten Sie die NSDataDetector-Bibliotheken von Apple nutzen, die einen String nehmen und versuchen zu sehen, ob es bekannte Datenelemente gibt (E-Mails, Adressen, Daten usw.). Das SDK von Apple übernimmt die schweren Arbeiten zur Aktualisierung der TLDs und Sie können von ihren Bemühungen profitieren!! :)

Außerdem, wenn iMessage (oder ein anderes Textfeld) nicht denkt, dass es sich um eine E-Mail handelt, sollten Sie es dann als eine betrachten?

Ich habe diese Funktion in einer NSString-Kategorie platziert, also ist der String, den Sie testen, self.

- (BOOL)isValidEmail {
    // Zuerst Leerzeichen entfernen
    NSString *trimmedText = [self stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet];
    if (self && self.length > 0) return NO;

    NSError *error = nil;
    NSDataDetector *dataDetector = [[NSDataDetector alloc] initWithTypes:NSTextCheckingTypeLink error:&error];
    if (!dataDetector) return NO;

    // Dieser String ist nur dann eine gültige E-Mail, wenn iOS aus dem gesamten String einen mailto-Link erkennt
    NSArray *allMatches = [dataDetector matchesInString:trimmedText options:kNilOptions range:NSMakeRange(0, trimmedText.length)];
    if (error) return NO;
    return (allMatches.count == 1 && [[[allMatches.firstObject URL] absoluteString] isEqual:[NSString stringWithFormat:@"mailto:%@", self]]);
}

oder als Swift String-Erweiterung

extension String {
    func isValidEmail() -> Bool {
        let trimmed = self.trimmingCharacters(in: .whitespacesAndNewlines)
        guard !trimmed.isEmpty, let dataDetector = try? NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue) else {
            return false
        }
        let allMatches = dataDetector.matches(in: trimmed, options: [], range: NSMakeRange(0, trimmed.count))

        return allMatches.count == 1 && allMatches.first?.url?.absoluteString == "mailto:\(trimmed)"
    }
}

-7voto

Gaurav Gilani Punkte 1586
// Methodenaufruf
NSString *email = @"Ihre E-Mail-Adresse..";

BOOL temp = [self validateEmail:email];

if(temp)
{
// Gültig
}
else
{
// Ungültig
}
// Methodenbeschreibung

- (BOOL) validateEmail: (NSString *) email {
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
    BOOL isValid = [emailTest evaluateWithObject:email];
    return isValid;
}

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