Swift de Validation de Formulaire - Vérifier si l'Int ou String a été saisi
Je suis en train de valider un formulaire pour vous assurer que l'utilisateur a entré un nombre entier et non pas une chaîne. Je peux vérifier si le nombre est un entier comme suit:
var possibleNumber = timeRetrieved.text
convertedNumber = possibleNumber.toInt()
//convertedNumber is inferred to be of type "Int?", or "optional Int"
if convertedNumber != nil {
println("It's a number!")
totalTime = convertedNumber!
}
Mon problème est que je veux faire en sorte que l'utilisateur n'a pas entré de texte, double etc. Je veux seulement des nombres entiers. Le code suivant ne fonctionne pas car il renvoie la valeur vrai si la variable est un entier. Quel code dois-je utiliser pour évaluer si la variable n'est pas un entier?
if convertedNumber != nil {
let alertController = UIAlertController(title: "Validation Error", message: "You must enter an integer number!", preferredStyle: .Alert)
let alertAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Destructive, handler: {(alert : UIAlertAction!) in
alertController.dismissViewControllerAnimated(true, completion: nil)
})
alertController.addAction(alertAction)
presentViewController(alertController, animated: true, completion: nil)
OriginalL'auteur Tom | 2014-12-04
Vous devez vous connecter pour publier un commentaire.
Si le nombre entré par l'utilisateur n'est pas un entier, convertedNumber sera nul. Juste ajouter une clause else dans lequel vous pouvez afficher l'alerte.
OriginalL'auteur Marnix999L
Swift 2 changements: comme les deux Int("abc") et Int("0") 0, entier conversion ne peut pas être utilisé. Vous pouvez utiliser ceci:
Il utilise un decimalDigitCharacterSet, et peut être modifié pour utiliser quel que soit le caractère que vous voulez.
C'est beaucoup plus rapide que la Regex réponse. (2000 s'exécute, 0.004 s vs regex 0.233 s)
Int("abc")
etInt("0")
retournil
. J'ai glané cette de Minhal Khan réponse. J'ai posté une réponse qui utilise également ce initialiseur.OriginalL'auteur Graham Perks
Int
initialiseurCela fonctionne dans Swift 2.2 et au-dessus. Il est basé sur Minhal Khan réponse qui montre que
Int
a un initialiseur avec cette signature:init?(_ text: String, radix: Int = default)
. Depuisradix
a une valeur par défaut, il peut être laissé de côté. *plus d'infos sur cette initialisation se trouve ici.Remarque: je suppose
timeRetrieved
est unUITextField
. LeUITextField
text
propriété est une chaîne facultative (si par programme ne permet pas d'être nul). Par conséquent, le compilateur, il doit être déballé. J'ai utilisé le néant, la coalescence de l'opérateur (??
) de le remplacer par un nul pour la chaîne vide qui ne donne pas un nombre entier tel que désiré. Voici un post qui traite de l'optionalité de UITextfield.texte.OriginalL'auteur Mobile Dan
Ce que j'avais fait était d'obtenir la valeur et de vérifier si l'on pouvait convertir, fonctionne pour moi
OriginalL'auteur Minhal Khan
Basé sur @Graham Avantages répondre à un Swift 3 Version de chaîne d'extension:
Utilisation:
OriginalL'auteur Mario
Je recommande vraiment à l'aide d'une REGEX, j'ai été récemment en essayant de valider les 10 chiffres des numéros de téléphone à l'aide de
if let _ = Int(stringToTest)...
et sur la 32 bits de matériel, j'ai fait face à diverses problématiques.OriginalL'auteur JohnVanDijk