Est-ce que quelqu'un sait comment valider une adresse e-mail dans Swift? J'ai trouvé ce code:
- (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;
}
}
mais je ne peux pas le traduire en Swift.
ios
validation
email
swift
Giorgio Nocera
la source
la source
.coffee
Réponses:
J'utiliserais
NSPredicate
:pour les versions de Swift antérieures à 3.0:
pour les versions de Swift antérieures à 1.2:
la source
return emailTest.evaluateWithObject(testStr)
beaucoup plus simple et lisible? La comparaison avec== true
est un peu comme Javascript.Modification, mise à jour pour Swift 3:
Réponse originale pour Swift 2:
Ça marche bien.
la source
Comme
String
extension de classeSWIFT 4
Usage
la source
countElements
est maintenantcount
Si vous recherchez une solution propre et simple pour ce faire, vous devriez jeter un œil à https://github.com/nsagora/validation-components .
Il contient un prédicat de validation d'email qui est facile à intégrer dans votre code:
Derrière le capot, il utilise le RFC 5322 reg ex ( http://emailregex.com ):
la source
Voici la solution raisonnable:
"LA SOLUTION RAISONNABLE"
Utilisé et testé pendant des années dans de nombreuses applications à volume énorme.
1 - cela évite les nombreuses erreurs de regex terribles que vous voyez souvent dans ces suggestions
2 - il n'autorise PAS les e-mails stupides tels que "x @ x" qui sont considérés comme valides sous certains RFC, mais qui sont complètement stupides, ne peuvent pas être utilisés comme e-mails, et que votre personnel de support rejetterait instantanément, et que tous les services de messagerie (mailchimp, google, aws, etc.) refusent tout simplement. Si (pour une raison quelconque) vous avez besoin d'une solution qui autorise des chaînes telles que 'x @ x', utilisez une autre solution.
3 - le code est très, très, très compréhensible
4 - il est KISS, fiable et testé à la destruction sur les applications commerciales avec un grand nombre d'utilisateurs
5 - un point technique, le prédicat est un global, comme Apple le dit (faites attention aux suggestions de code qui ne l'ont pas)
C'est si facile.
Explication:
Dans la description suivante, "OC" signifie un caractère ordinaire - une lettre ou un chiffre.
__firstpart ... doit commencer et se terminer par un OC. Pour les caractères du milieu, vous pouvez avoir certains caractères tels que le trait de soulignement, mais le début et la fin doivent être un OC. (Cependant, c'est ok d'avoir un seul OC et c'est tout, par exemple: [email protected])
__serverpart ... Vous avez des sections comme "blah". qui se répètent . (Donc type de chose mail.city.fcu.edu.) Les sections doivent commencer et se terminer par un OC, mais au milieu vous pouvez également avoir un tiret "-". (Si vous souhaitez autoriser d' autres caractères inhabituels, peut-être le trait de soulignement, ajoutez-le simplement avant le tiret.) C'est OK d'avoir une section qui n'est qu'un OC. (Comme dans [email protected]) Vous pouvez avoir jusqu'à cinq sections, vous devez en avoir une. Enfin , le TLD (.com) est strictement 2 à 8 en taille. Évidemment, changez simplement ce "8" selon les préférences de votre service d'assistance.
IMPORTANT!
Vous devez conserver le prédicat en tant que global, ne pas le construire à chaque fois.
Notez que c'est la première chose qu'Apple mentionne sur tout le problème dans les documents.
C'est très surprenant lorsque vous voyez des suggestions qui ne mettent pas en cache le prédicat.
la source
Voici un fusible des deux réponses les plus votées avec l'expression rationnelle correcte: une extension de chaîne utilisant un prédicat afin que vous puissiez appeler string.isEmail
la source
Le moyen le plus simple dans Swift 5
Exemple
Retour...
la source
Je suggère de l'utiliser comme une extension de String:
Et pour l'utiliser:
la source
Ceci est la version mise à jour pour Swift 2.0 - 2.2
la source
Il y a beaucoup de bonnes réponses ici, mais beaucoup de "regex" sont incomplètes et il peut arriver qu'un email comme: "nom @ domaine" donne un email valide, mais ce n'est pas le cas. Voici la solution complète:
la source
Voici une méthode basée sur
rangeOfString
:Remarque: longueur du TLD mise à jour.
Voici le RegEx définitif pour le courrier électronique selon la RFC 5322, notez qu'il est préférable de ne pas l'utiliser car il vérifie uniquement la syntaxe de base des adresses électroniques et ne vérifie pas si le domaine de premier niveau existe.
Voir Regular-Expressions.info pour des informations plus complètes sur les RegEx par e-mail.
Notez qu'aucun échappement comme requis par un langage tel que Objective-C ou Swift.
la source
.engineer
existent.Je préfère utiliser une extension pour cela. En outre, cette URL http://emailregex.com peut vous aider à tester si regex est correct. En fait, le site propose différentes implémentations pour certains langages de programmation. Je partage mon implémentation pour Swift 3 .
la source
Pour swift 2.1: cela fonctionne correctement avec l'email foo @ bar
la source
Utilisation de Swift 4.2
Et utilisé
la source
Il s'agit d'une nouvelle version de "LA SOLUTION RAISONNABLE" de @Fattie, testée sur Swift 4.1 dans un nouveau fichier appelé
String+Email.swift
:Son utilisation est donc simple:
Je n'aime tout simplement pas ajouter un
func
auxString
objets, car être une adresse e-mail leur est inhérente (ou non). Donc, uneBool
propriété conviendrait mieux qu'unfunc
, d'après ma compréhension.la source
Créez une extension simple:
Exemple:
Vous pouvez étendre suivant l' extension à tout ce dont vous avez besoin:
isValidPhoneNumber
,isValidPassword
etc ...la source
NSRange
propriété length doit utiliser à laString
utf16.count
place decharacters.count
Dans Swift 4.2 et Xcode 10.1
Si vous souhaitez utiliser SharedClass.
Et appelez une fonction comme celle-ci ...
la source
J'ai fait une bibliothèque conçue pour les validations d'entrée et l'un des "modules" vous permet de valider facilement un tas de trucs ...
Par exemple pour valider un email:
SwiftCop est la bibliothèque ... j'espère que cela vous aidera!
la source
Voici une extension dans Swift 3
Utilisez-le simplement comme ceci:
la source
Puisqu'il y a tellement de noms de domaine de premier niveau étranges maintenant, j'arrête de vérifier la longueur du domaine de premier plan ...
Voici ce que j'utilise:
la source
Semble fonctionner aussi ...
la source
Réponse mise à jour @Arsonik à Swift 2.2, en utilisant un code moins détaillé que les autres solutions proposées:
la source
@ La réponse de JeffersonBe est proche, mais renvoie
true
si la chaîne est "quelque chose contenant quelqu'[email protected] un email valide" qui n'est pas ce que nous voulons. Ce qui suit est une extension sur String qui fonctionne bien (et permet de tester pour phoneNumber valide et d'autres détecteurs de données pour démarrer.la source
Et pour Swift 3 :
la source
Mon seul ajout à la liste des réponses serait que pour Linux,
NSRegularExpression
n'existe pas, c'est en faitRegularExpression
Cela se compile avec succès sur macOS et Ubuntu.
la source
Meilleure solution avec le meilleur résultat pour
la source
J'aime créer une extension
usage:
la source
Swift 5
Ensuite:
la source
Regex parfait comme Google Email
la source
Ou vous pouvez avoir une extension pour le texte facultatif de UITextField:
comment utiliser:
extension:
la source