我试图验证NSString
是int
。我有以下代码来尝试这个:
if([[NSScanner scannerWithString:stringValue] scanInt:nil]){
//...
}
但是,如果stringValue
为@"1.0something"
,则仍会返回YES
布尔值,以检查我的NSString
是否为int
。
有没有比这更准确的方法?
答案 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
由于默认情况下未启用部分字符串验证,因此它会拒绝不完全验证为数字的字符串。