我怎么能确定NSString真的是一个int?

时间:2016-01-11 03:41:59

标签: objective-c nsstring

我试图验证NSStringint。我有以下代码来尝试这个:

if([[NSScanner scannerWithString:stringValue] scanInt:nil]){
//...
}

但是,如果stringValue@"1.0something",则仍会返回YES布尔值,以检查我的NSString是否为int

有没有比这更准确的方法?

3 个答案:

答案 0 :(得分:1)

一种可能的解决方案是将int转换回NSString并查看它是否与原始字符串匹配。

NSString *oldStr = ... // your original string
NSString *newStr = [NSString stringWithFormat:@"%d", [oldStr intValue]];
if ([newStr isEqualToString:oldStr]) {
    // the string is a valid int value
}

您还可以展开NSScanner检查,并在致电scanInt:后确保扫描仪在最后。

NSScanner *scanner = [NSScanner scannerWithString:stringValue];
if ([scanner scanInt:nil] && [scanner atEnd]) {
    // valid int string
}

或者您可以确保字符串仅包含字符0-9:

if ([stringValue rangeOfCharacterFromSet:[[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet]].location == NSNotFound) {
    // valid int
}

或者您可以使用正则表达式。

答案 1 :(得分:1)

像这样检查

NSScanner* scan = [NSScanner scannerWithString:stringValue]; 
int val; 
return [scan scanInt:&val] && [scan isAtEnd];

答案 2 :(得分:0)

您可以使用NSNumberFormatter来确定字符串是否为有效数字:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
[formatter numberFromString:@"1.0"]; // returns @(1)
[formatter numberFromString:@"1.0something"]; // returns nil

由于默认情况下未启用部分字符串验证,因此它会拒绝不完全验证为数字的字符串。