如何在Objective-C中检查输入是双字符还是字符串?

问题描述:

如何检查给定的输入是字符串还是双精度?我试过[self.display.text doubleValue],如果这不是一个有效的double,它会返回0,但问题是0实际上是一个有效的输入,所以程序不会知道它是默认的错误后备还是实际的有效输入。如何在Objective-C中检查输入是双字符还是字符串?

你如何解决这个问题?

+1

使用'NSPredicate'并尝试对它进行正则表达式匹配。 – Eimantas 2012-07-06 14:25:38

+0

@Eimantas所以,只需使用'NSPredicate'与正则表达式,如:'^ [0-9](\。[0-9] +)?$'并测试它呢? – swiftcode 2012-07-06 14:31:07

+0

是的,但我会用更简单的POSIX'[:number:]'模板来检查它是否与一个数字匹配。 – Eimantas 2012-07-06 14:49:33

您可以使用正则表达式和NSPredicate来测试,如果它是一个双精度值。

NSPredicate *predicate; 
predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES '^[-+]?[0-9]*\.?[0-9]+$'"]; 
BOOL result = [predicate evaluateWithObject:@"yourdoublevaluehere"]; 

您可能需要调整正则表达式,因为我写了一个正式表达式,从头开始。

+0

是的,我做到了这一点,它工作得很好,谢谢! – swiftcode 2012-07-06 17:47:53

+0

很高兴帮助:) – tGilani 2012-07-06 17:59:52

做它用strtodreference)为您提供分析的最后一个字符“C”的方式:

NSString *input = @"123.456"; 
char *endptr; 
double value = strtod([input UTF8String], &endptr); 
if (*endptr != '\0') 
{ 
    NSLog(@"input is a string"); 
} 

-[NSFormatter getObjectValue:forString:range:error:]做你想做的。

更多详情here