Comment Tester la Saisie de Caractères pour objet UITextField que l'Utilisateur Entre des Caractères et de Prévenir des Caractères non valides
D'abord, j'ai installé le clavier pour le UITextField d'utiliser le nombre avec des décimales de style. De sorte que l'utilisateur ne peut entrer des nombres et une seule décimale.
Ce que je veux faire est de tester l'entrée de l'utilisateur entre elle et d'éviter que plusieurs décimales saisie et à la limite de la partie décimale du nombre à deux endroits. Je ne veux pas arrondir le nombre, ni même de les traiter comme un numéro. Je veux simplement éviter à l'utilisateur d'entrer dans plus de deux chiffres à droite de la virgule.
OriginalL'auteur Seamus | 2012-02-18
Vous devez vous connecter pour publier un commentaire.
La solution, finalement, s'est avéré être assez trivial. Malheureusement, beaucoup de questions et réponses relatives à cette question sont sur la validation ou mise en forme de valeurs numériques, pas contrôle ce qu'un utilisateur pourrait entrer.
La suite de la mise en œuvre de la shouldChangeCharactersInRange méthode du délégué est ma solution. Comme toujours, les expressions régulières rock dans cette situation. RegExLib.com est une excellente source utile pour l'expression rationnelle des échantillons ou des solutions. Je ne suis pas une RegEx gourou et toujours mal un peu de les mettre ensemble, donc des suggestions pour l'améliorer sont les bienvenues.
Le code ci-dessus permet à l'utilisateur de saisir ces types de valeurs: 1, 1.1, 1.11, .1, .11. Notez que cette application ne remplace pas le champ de texte chaîne de caractères, qui serait entraîne une récursivité. Cette solution tout simplement rejette le caractère suivant les entrées de l'utilisateur si le "newString" ne correspond pas à l'expression régulière.
salut! merci! votre réponse est très utile. Mais comment faire pour désactiver "." et ","??
Frade, je voulais que l'utilisateur puisse utiliser le".". Vous devriez être en mesure de définir la keyboardType de la textField à UIKeyboardTypeNumberPad. Ce clavier ne comprend pas la ponctuation.
Génial, mec! 🙂
Comment voulez-vous modifier le regex pour permettre le caractère moins au début? Par exemple, j'aimerais que d'accepter de tels chiffres -100.50
OriginalL'auteur Seamus
Bon! Si quelqu'un a besoin de travailler avec des non-US devises: l'euro ou d'autres, avec fraction séparés par des virgules au lieu de points, utilisez celui-ci:
La seule différence est qu'il permet une virgule ou un point. ([\,\.] - soit . ou ,) le Seul truc, c'est que vous avez besoin pour remplacer la virgule par point lors de l'utilisation de vos acquis nombre, parce que l'ordinateur utilise le point pour séparer la fraction, et non la virgule.
OriginalL'auteur Vladimir Shutyuk
Le standard de la façon de traiter ce problème dans iOS est l'attachement d'une
UITextFieldDelegate
à votreUITextField
, et de mettre en œuvretextField:shouldChangeCharactersInRange:replacementString:
méthode. À l'intérieur de cette méthode, vous pouvez valider la chaîne pour être de la bonne "forme" pour vos fins (un point, pas plus de deux chiffres après la virgule, etc.) et de fournir une autre chaîne si l'entrée ne suivent pas le format attendu.OriginalL'auteur dasblinkenlight
Après beaucoup d'expérimentation et de recherche à d'autres solutions (qui semblent être trop complexe et délicat), je suis venu avec la suivante, ce qui évite à l'utilisateur d'entrer dans quelque chose, mais un valide montant en devise. En gros, laissez une instance de NSNumberFormatter (créés ailleurs dans le viewController) de faire le travail:
Fonctionne pour moi jusqu'à présent, l'espoir que cela aide quelqu'un.
Tout d'abord, j'ai mis le clavier pour UIKeyboardTypeDecimalPad. Ensuite, j'ai utilisé le code suivant
}
OriginalL'auteur user3228583
Pour Swift 4 principale réponse de la question est
OriginalL'auteur Malder
Vous pouvez passer la chaîne de uitexfield à la méthode ci-dessous, elle sera de retour oui/non..en conséquence, vous pouvez afficher le message d'erreur
OriginalL'auteur Priyanka Singh