Comment vérifier si le contenu d'une NSString est une valeur entière? Existe-t-il un moyen facilement disponible?
Il devait y avoir un meilleur moyen que de faire quelque chose comme ça:
- (BOOL)isInteger:(NSString *)toCheck {
if([toCheck intValue] != 0) {
return true;
} else if([toCheck isEqualToString:@"0"]) {
return true;
} else {
return false;
}
}
Vous pouvez utiliser le -intValue
ou -integerValue
méthodes. Renvoie zéro si la chaîne ne commence pas par un entier, ce qui est un peu dommage car zéro est une valeur valide pour un entier.
Une meilleure option pourrait être d'utiliser [NSScanner scanInt:]
qui renvoie un BOOL
indiquant s'il a trouvé ou non une valeur appropriée.
Quelque chose comme ça:
NSScanner* scan = [NSScanner scannerWithString:toCheck];
int val;
return [scan scanInt:&val] && [scan isAtEnd];
En s'appuyant sur un réponse de @kevbo, cela vérifiera les nombres entiers> = 0:
if (fooString.length <= 0 || [fooString rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location != NSNotFound) {
NSLog(@"This is not a positive integer");
}
A Swift version de ce qui précède:
func getPositive(incoming: String) -> String {
if (incoming.characters.count <= 0) || (incoming.rangeOfCharacterFromSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet) != nil) {
return "This is NOT a positive integer"
}
return "YES! +ve integer"
}
N'oubliez pas les chiffres avec un point décimal !!!
NSMutableCharacterSet *carSet = [NSMutableCharacterSet characterSetWithCharactersInString:@"0123456789."];
BOOL isNumber = [[subBoldText stringByTrimmingCharactersInSet:carSet] isEqualToString:@""];
func getPositive(input: String) -> String {
if (input.count <= 0) || (input.rangeOfCharacter(from: NSCharacterSet.decimalDigits.inverted) != nil) {
return "This is NOT a positive integer"
}
return "YES! integer"
}
Mettre à jour la réponse de @ coco pour Swift 5