web-dev-qa-db-fra.com

NSString est un entier?

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;
  }
}
33
Carlos Barbosa

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.

82
Stephen Darlington

Quelque chose comme ça:

NSScanner* scan = [NSScanner scannerWithString:toCheck]; 
int val; 
return [scan scanInt:&val] && [scan isAtEnd];
44
Steven Green

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"
}
8
coco

N'oubliez pas les chiffres avec un point décimal !!!

NSMutableCharacterSet *carSet = [NSMutableCharacterSet characterSetWithCharactersInString:@"0123456789."];
BOOL isNumber = [[subBoldText stringByTrimmingCharactersInSet:carSet] isEqualToString:@""];
2
TtheTank
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

0
black_pearl