Quelle est la manière la plus propre de valider une adresse e-mail saisie par un utilisateur sur iOS 2.0?
REMARQUE : Il s'agit d'une question historique spécifique à iOS 2.0 et en raison de son âge et du nombre d'autres questions qui y sont liées, elle ne peut pas être retirée et NE DOIT PAS être remplacée par une question "moderne".
cocoa-touch
email-validation
iphone-sdk-2
Marcus S. Zarra
la source
la source
NSDataDetector
pour valider les adresses e-mail: stackoverflow.com/a/23547905/257550Réponses:
La réponse à Utiliser une expression régulière pour valider une adresse e-mail explique en détail que la grammaire spécifiée dans la RFC 5322 est trop compliquée pour les expressions régulières primitives.
Je recommande une véritable approche parseur comme MKEmailAddress .
Comme solution rapide d'expressions régulières, voyez cette modification de DHValidation :
la source
@"[^@]+@[^.@]+(\\.[^.@]+)+"
Si vous avez besoin de vérifier une adresse électronique, envoyez-lui un message et voyez si cela réussit. Vous ne le vérifierez jamais avec un niveau de précision avec un regex seul, il est donc préférable de ne pas pisser les utilisateurs et de perdre les inscriptions à cause d'un regex inutilement strict.Lisez la RFC. Presque tous ceux qui pensent savoir comment analyser / nettoyer / valider une adresse e-mail se trompent.
http://tools.ietf.org/html/rfc2822 La section 3.4.1 est très utile. Remarquer
Oui, cela signifie que +, ', etc. sont tous légitimes.
la source
La meilleure solution que j'ai trouvée jusqu'à présent (et celle avec laquelle j'ai fini par aller) est d'ajouter RegexKitLite au projet qui donne accès aux expressions régulières via NSString Categories.
Il est assez facile d'ajouter au projet et une fois en place, n'importe quelle logique de validation de courrier électronique d'expression régulière fonctionnera.
la source
Un bon début est de décider ce que vous et ne voulez pas accepter comme adresse e-mail?
99% des adresses e-mail ressemblent à ceci: [email protected] ou [email protected]
Cependant, il est techniquement légal d'avoir une adresse e-mail comme celle-ci: f
!#$%&'*+-/=?^_
{|} ~ "ha!" @ ComIl n'y a probablement qu'une poignée d'e-mails valides dans le monde pour les domaines de premier niveau, et presque personne n'utilise la plupart de ces autres caractères (en particulier les guillemets et les crochets), vous voudrez peut-être supposer que ce sont toutes des choses invalides à faire. Mais vous devez le faire par décision consciente.
Au-delà de cela, faites ce que Paul dit et essayez de faire correspondre l'entrée à une expression régulière comme celle-ci: ^ [A-Z0-9 ._% + -] + @ [A-Z0-9 .-] +. [AZ] { 2,} $
Celui-ci correspondra à l'adresse e-mail de presque tout le monde.
la source
Bien que l'accent soit mis sur les expressions régulières, il est bon, mais ce n'est qu'une première étape nécessaire. Il y a d'autres étapes qui doivent également être prises en compte pour une bonne stratégie de validation.
Deux choses sur ma tête sont:
Validation DNS pour s'assurer que le domaine existe réellement.
Après la validation DNS, vous pouvez également choisir de faire une validation smtp. envoyer un appel au serveur smtp pour voir si l'utilisateur existe réellement.
De cette façon, vous pouvez détecter toutes sortes d'erreurs utilisateur et vous assurer qu'il s'agit d'un e-mail valide.
la source
Cette fonction est simple et vérifie encore plus soigneusement l'adresse e-mail. Par exemple, selon la RFC2822, une adresse e-mail ne doit pas contenir deux points d'affilée, comme prénom..nom @ domaine..com
Il est également important d'utiliser des ancres dans les expressions régulières comme vu dans cette fonction. Sans ancres, l'adresse e-mail suivante est considérée comme valide: prénom; nom) [email protected] (bla parce que la section [email protected] est valide, ignorant le premier; nom) au début et (bla à la fin. Les ancres forcent le moteur d'expressions régulières pour valider l'intégralité de l'e-mail.
Cette fonction utilise NSPredicate qui n'existe pas dans iOS 2. Malheureusement, cela n'aidera peut-être pas le demandeur, mais avec un peu de chance, cela aidera les autres avec les nouvelles versions d'iOS. Les expressions régulières de cette fonction peuvent cependant être appliquées à RegExKitLite dans iOS 2. Et pour ceux qui utilisent iOS 4 ou version ultérieure, ces expressions régulières peuvent être implémentées avec NSRegularExpression.
Voir valider l'adresse e-mail à l'aide d'une expression régulière dans Objective-C .
la source
la source
J'ai trouvé que l'utilisation d'une expression régulière fonctionne assez bien pour valider une adresse e-mail.
Le principal inconvénient des expressions régulières est bien sûr la maintenabilité, alors commentez comme vous ne l'avez jamais fait auparavant. Je vous le promets, si vous ne le faites pas, vous souhaiteriez que vous le fassiez lorsque vous reviendrez à l'expression après quelques semaines.
Voici un lien vers une bonne source, http://www.regular-expressions.info/email.html .
la source
Creuser la saleté, mais je suis juste tombé sur SHEmailValidator qui fait un travail parfait et a une belle interface.
la source
De nombreux sites Web fournissent des RegExes, mais vous feriez bien de les apprendre et de les comprendre, ainsi que de vérifier que ce que vous voulez qu'il fasse répond à vos besoins dans le RFC officiel pour les formats d'adresses e-mail.
Pour apprendre RegEx, les langues interprétées peuvent être un excellent simplificateur et un banc d'essai. Rubular est construit sur Ruby, mais c'est un bon moyen rapide de tester et de vérifier: http://www.rubular.com/
Au-delà de cela, achetez la dernière édition du livre O'Reilly Mastering Regular Expressions. Vous voudrez passer le temps à comprendre les 3 ou 4 premiers chapitres. Tout après cela renforcera l'expertise sur une utilisation RegEx hautement optimisée.
Souvent, une série de RegEx plus petits et plus faciles à gérer sont plus faciles à maintenir et à déboguer.
la source
Voici une extension de String qui valide un e-mail dans Swift.
Copié de la réponse vers: vérifier qu'une adresse e-mail est valide sur iOS
la source
NSPredicate
sur iOS 2.0Vous ne devriez pas essayer d'utiliser regex pour valider un e-mail. Avec des TLD en constante évolution, votre validateur est incomplet ou inexact. Au lieu de cela, vous devriez tirer parti des
NSDataDetector
bibliothèques Apple qui prendront une chaîne et essayer de voir s'il existe des champs de données connus (e-mails, adresses, dates, etc.). Le SDK d'Apple fera le gros du travail pour rester à jour avec les TLD et vous pourrez profiter de leurs efforts! :)De plus, si iMessage (ou tout autre champ de texte) ne pense pas qu'il s'agit d'un e-mail, devriez-vous envisager un e-mail?
J'ai mis cette fonction dans une
NSString
catégorie, donc la chaîne que vous testez estself
.ou comme
String
extension rapidela source
validate email objective-c
, cette question est le troisième résultat. Certaines choses sur Internet ne vieillissent pas. :-)NSDataDetector
n'existait PAS dans iOS 2.0, c'est ce que cette question était / concerne.la source
NSPredicate
n'existait pas dans iOS 2; il n'a pas été ajouté avant iOS 3.