在我的iPhone应用程序中,我试图理解字符串是否是有效数字,下面的代码大部分时间都有效,但是当我有一个以数字开头并以文本结尾的值时,它会错误地返回“true”,例如“34rty”
if([[NSScanner scannerWithString:value] scanDouble:NULL] ){
val=[NSNumber numberWithDouble:[value doubleValue]];
}
这里有什么问题?
答案 0 :(得分:2)
scanDouble
通过引用返回。
NSString *string = @"34rty";
NSScanner *scanner = [NSScanner scannerWithString:string];
double doubleValue;
[scanner scanDouble:&doubleValue];
NSNumber *doubleNumber = [NSNumber numberWithDouble:doubleValue];
NSLog(@"doubleValue: %f", doubleValue);
NSLog(@"doubleNumber: %@", doubleNumber);
NSLog输出:
doubleValue: 34.000000
doubleNumber: 34
如果有前面的文字,您必须扫描到该号码。
正如@Benjamin所说,RegEx可能是更好的选择。
答案 1 :(得分:-2)
NSScanner在第一个匹配字符处停止。所以它找到'3',当它扫描一个double时返回正数,然后停止运行。它不会检查每个角色。
对于此目的,REGEX检查是更好的选择。