Weiß jemand, wie man eine E-Mail-Adresse in Swift validiert? Ich habe diesen Code gefunden:
- (BOOL) validEmail:(NSString*) emailString {
if([emailString length]==0){
return NO;
}
NSString *regExPattern = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSRegularExpression *regEx = [[NSRegularExpression alloc] initWithPattern:regExPattern options:NSRegularExpressionCaseInsensitive error:nil];
NSUInteger regExMatches = [regEx numberOfMatchesInString:emailString options:0 range:NSMakeRange(0, [emailString length])];
NSLog(@"%i", regExMatches);
if (regExMatches == 0) {
return NO;
} else {
return YES;
}
}
aber ich kann es nicht in Swift übersetzen.
ios
validation
email
swift
Giorgio Nocera
quelle
quelle
.coffee
Antworten:
Ich würde verwenden
NSPredicate
:für Versionen von Swift vor 3.0:
für Versionen von Swift vor 1.2:
quelle
return emailTest.evaluateWithObject(testStr)
viel einfacher und lesbarer? Im Vergleich zu== true
ist ein bisschen wie Javascript.Bearbeitung, aktualisiert für Swift 3:
Ursprüngliche Antwort für Swift 2:
Es funktioniert gut.
quelle
Als
String
KlassenerweiterungSWIFT 4
Verwendungszweck
quelle
countElements
ist jetztcount
Wenn Sie nach einer sauberen und einfachen Lösung suchen, sollten Sie sich https://github.com/nsagora/validation-components ansehen .
Es enthält ein E-Mail-Validierungsprädikat, das sich leicht in Ihren Code integrieren lässt:
Hinter der Haube wird der RFC 5322 reg ex ( http://emailregex.com ) verwendet:
quelle
Hier ist die vernünftige Lösung:
"DIE ANGEMESSENE LÖSUNG"
Wird seit Jahren in vielen großvolumigen Apps verwendet und getestet.
1 - es vermeidet die vielen schrecklichen Regex-Fehler, die Sie oft in diesen Vorschlägen sehen
2 - Es erlaubt KEINE dummen E-Mails wie "x @ x", die unter bestimmten RFCs als gültig gelten, aber völlig albern sind, nicht als E-Mails verwendet werden können und die Ihre Support-Mitarbeiter sofort ablehnen würden und die alle Mailer-Dienste (Mailchimp, Google, Aws usw.) lehnen einfach ab. Wenn Sie (aus irgendeinem Grund) eine Lösung benötigen, die Zeichenfolgen wie 'x @ x' zulässt, verwenden Sie eine andere Lösung.
3 - Der Code ist sehr, sehr, sehr verständlich
4 - es ist KISS, zuverlässig und auf kommerziellen Apps mit einer enormen Anzahl von Benutzern bis zur Zerstörung getestet
5 - ein technischer Punkt, das Prädikat ist ein globales, wie Apple es vorschreibt (achten Sie auf Code-Vorschläge, die dies nicht haben)
So einfach ist das.
Erläuterung:
In der folgenden Beschreibung bedeutet "OC" ein gewöhnliches Zeichen - ein Buchstabe oder eine Ziffer.
__firstpart ... muss mit einem OK beginnen und enden . Für die Zeichen in der Mitte können Sie bestimmte Zeichen wie Unterstrich verwenden, aber Anfang und Ende müssen ein OK sein. (Allerdings ist es in Ordnung , nur ein OC zu haben , und das ist es, zum Beispiel: [email protected])
__serverpart ... Sie haben Abschnitte wie " bla ". welche wiederholen . (Also mail.city.fcu.edu Art der Sache.) Die Abschnitte müssen mit einem OC beginnen und enden , aber in der Mitte können Sie auch einen Bindestrich "-" haben. (Wenn Sie andere ungewöhnliche Zeichen zulassen möchten , z. B. den Unterstrich, fügen Sie einfach vor dem Bindestrich hinzu.) Es ist in Ordnung , einen Abschnitt zu haben, der nur ein OK ist. (Wie in [email protected]) Sie können bis zu fünf Abschnitte haben, Sie müssen einen haben. Schließlich ist die TLD (wie z. B. .com) streng 2 bis 8 groß. Ändern Sie einfach diese "8", wie von Ihrer Support-Abteilung bevorzugt.
WICHTIG!
Sie müssen das Prädikat als global beibehalten und nicht jedes Mal erstellen.
Beachten Sie, dass dies das erste ist, was Apple in den Dokumenten über das gesamte Problem erwähnt .
Es ist sehr überraschend, wenn Sie Vorschläge sehen, die das Prädikat nicht zwischenspeichern.
quelle
Hier ist eine Sicherung der beiden am häufigsten bewerteten Antworten mit dem richtigen regulären Ausdruck: eine String-Erweiterung mit Prädikat, damit Sie string.isEmail aufrufen können
quelle
Einfachster Weg in Swift 5
Beispiel
kehrt zurück...
quelle
Ich würde vorschlagen, es als Erweiterung von String zu verwenden:
Und um es zu benutzen:
quelle
Dies ist die aktualisierte Version für Swift 2.0 - 2.2
quelle
Hier gibt es viele richtige Antworten, aber viele der "regulären Ausdrücke" sind unvollständig und es kann vorkommen, dass eine E-Mail wie "name @ domain" eine gültige E-Mail ergibt, dies ist jedoch nicht der Fall. Hier die Komplettlösung:
quelle
Hier ist eine Methode basierend auf
rangeOfString
:Hinweis: Aktualisierte TLD-Länge.
Hier ist das endgültige RegEx für E-Mails gemäß RFC 5322. Beachten Sie, dass dies am besten nicht verwendet wird, da nur die grundlegende Syntax von E-Mail-Adressen überprüft wird und nicht überprüft wird, ob die Domäne der obersten Ebene vorhanden ist.
Siehe Regular-Expressions.info für vollständigere Informationen über E - Mail regexs.
Beachten Sie, dass eine Sprache wie Objective-C oder Swift kein Entkommen erfordert.
quelle
.engineer
vorhanden vorhanden sind.Ich bevorzuge dafür eine Erweiterung. Außerdem kann diese URL http://emailregex.com Ihnen helfen, zu testen, ob Regex korrekt ist. Tatsächlich bietet die Site verschiedene Implementierungen für einige Programmiersprachen. Ich teile meine Implementierung für Swift 3 .
quelle
Für Swift 2.1: Dies funktioniert korrekt mit E-Mail foo @ bar
quelle
Verwendung von Swift 4.2
Und gebraucht
quelle
Dies ist eine neue Version für "THE REASONABLE SOLUTION" von @Fattie, getestet auf Swift 4.1 in einer neuen Datei namens
String+Email.swift
:Die Verwendung ist also einfach:
Ich mag es einfach nicht
func
, denString
Objekten ein hinzuzufügen , da ihnen eine E-Mail-Adresse inhärent ist (oder nicht). Nach meinem VerständnisBool
würde eine Immobilie also besser passen als einefunc
.quelle
Erstellen Sie eine einfache Erweiterung:
Beispiel:
Sie können folgende Erweiterung etwas erweitern Sie brauchen:
isValidPhoneNumber
,isValidPassword
etc ...quelle
NSRange
Länge EigenschaftString
utf16.count
anstelle voncharacters.count
In Swift 4.2 und Xcode 10.1
Wenn Sie SharedClass verwenden möchten.
Und Funktion wie diese aufrufen ....
quelle
Ich habe eine Bibliothek für Eingabevalidierungen erstellt und eines der "Module" ermöglicht es Ihnen, eine Reihe von Dingen einfach zu validieren ...
Zum Validieren einer E-Mail:
SwiftCop ist die Bibliothek ... hoffe es hilft!
quelle
Hier ist eine Erweiterung in Swift 3
Verwenden Sie es einfach so:
quelle
Da es jetzt so viele seltsame Top-Level-Domain-Namen gibt, höre ich auf, die Länge der Top-Domain zu überprüfen ...
Folgendes benutze ich:
quelle
Scheint auch zu funktionieren ...
quelle
Aktualisierte Antwort @Arsonik Antwort auf Swift 2.2 mit weniger ausführlichem Code als andere angebotene Lösungen:
quelle
Die Antwort von @ JeffersonBe ist knapp, wird aber zurückgegeben,
true
wenn die Zeichenfolge "etwas enthält, das [email protected] eine gültige E-Mail enthält", was nicht das ist, was wir wollen. Das Folgende ist eine Erweiterung von String, die gut funktioniert (und das Testen auf gültige phoneNumber und andere Datendetektoren zum Booten ermöglicht.quelle
Und für Swift 3 :
quelle
Mein einziger Zusatz zur Liste der Antworten wäre, dass es für Linux
NSRegularExpression
nicht existiert, es ist tatsächlichRegularExpression
Dies wird sowohl unter MacOS als auch unter Ubuntu erfolgreich kompiliert.
quelle
Beste Lösung mit bestem Ergebnis für
quelle
Ich mag es, eine Erweiterung zu erstellen
Verwendungszweck:
quelle
Swift 5
Dann:
quelle
Perfekter Regex wie Google Email
quelle
Oder Sie können eine Erweiterung für den optionalen Text von UITextField haben:
wie benutzt man:
Erweiterung:
quelle