我如何确定 NSString 真的是一个 int?
How can I be certain that a NSString is really an int?
我正在尝试验证 NSString
是 int
。我有以下代码来尝试这样做:
if([[NSScanner scannerWithString:stringValue] scanInt:nil]){
//...
}
但是,如果 stringValue
是 @"1.0something"
这仍然会 return 一个 YES
布尔值来检查我的 NSString
是否是 int
.
有没有比这更准确的方法?
一个可能的解决方案是将 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
}
或者您可以使用正则表达式。
这样检查
NSScanner* scan = [NSScanner scannerWithString:stringValue];
int val;
return [scan scanInt:&val] && [scan isAtEnd];
您可以使用 NSNumberFormatter
来确定字符串是否为有效数字:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
[formatter numberFromString:@"1.0"]; // returns @(1)
[formatter numberFromString:@"1.0something"]; // returns nil
由于默认情况下未启用部分字符串验证,因此它将拒绝未完全验证为数字的字符串。
我正在尝试验证 NSString
是 int
。我有以下代码来尝试这样做:
if([[NSScanner scannerWithString:stringValue] scanInt:nil]){
//...
}
但是,如果 stringValue
是 @"1.0something"
这仍然会 return 一个 YES
布尔值来检查我的 NSString
是否是 int
.
有没有比这更准确的方法?
一个可能的解决方案是将 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
}
或者您可以使用正则表达式。
这样检查
NSScanner* scan = [NSScanner scannerWithString:stringValue];
int val;
return [scan scanInt:&val] && [scan isAtEnd];
您可以使用 NSNumberFormatter
来确定字符串是否为有效数字:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
[formatter numberFromString:@"1.0"]; // returns @(1)
[formatter numberFromString:@"1.0something"]; // returns nil
由于默认情况下未启用部分字符串验证,因此它将拒绝未完全验证为数字的字符串。