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)"
}
}
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.
0 Stimmen
Bitte beachten Sie, dass dies im Jahr 2009 gefragt wurde, als es kein NSRegularExpression auf dem iPhone gab.
0 Stimmen
Menschen, die iOS 3.0 verwenden, können
NSPredicate
verwenden; Menschen, die iOS 4.0 verwenden, könnenNSRegularExpression
verwenden.1 Stimmen
Da dies die kanonische Frage zur Validierung von E-Mail-Adressen zu sein scheint, macht es Sinn, sie mit verbesserten Antworten zu aktualisieren, während iOS reift. In diesem Sinne habe ich eine Antwort hinzugefügt, die iOS's
NSDataDetector
verwendet, um E-Mail-Adressen zu validieren: stackoverflow.com/a/23547905/2575500 Stimmen
Dies ist die kanonische Frage für iOS 2.
NSDataDetector
existierte nicht in iOS 2.2 Stimmen
Diese Frage scheint nicht zum Thema zu passen, da sie sich auf iOS 2.0 bezieht, das vor vielen Jahren veraltet wurde.