如何在Objective-C中检查输入是双字符还是字符串?
问题描述:
如何检查给定的输入是字符串还是双精度?我试过[self.display.text doubleValue]
,如果这不是一个有效的double,它会返回0,但问题是0实际上是一个有效的输入,所以程序不会知道它是默认的错误后备还是实际的有效输入。如何在Objective-C中检查输入是双字符还是字符串?
你如何解决这个问题?
答
您可以使用正则表达式和NSPredicate来测试,如果它是一个双精度值。
NSPredicate *predicate;
predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES '^[-+]?[0-9]*\.?[0-9]+$'"];
BOOL result = [predicate evaluateWithObject:@"yourdoublevaluehere"];
您可能需要调整正则表达式,因为我写了一个正式表达式,从头开始。
答
做它用strtod
(reference)为您提供分析的最后一个字符“C”的方式:
NSString *input = @"123.456";
char *endptr;
double value = strtod([input UTF8String], &endptr);
if (*endptr != '\0')
{
NSLog(@"input is a string");
}
使用'NSPredicate'并尝试对它进行正则表达式匹配。 – Eimantas 2012-07-06 14:25:38
@Eimantas所以,只需使用'NSPredicate'与正则表达式,如:'^ [0-9](\。[0-9] +)?$'并测试它呢? – swiftcode 2012-07-06 14:31:07
是的,但我会用更简单的POSIX'[:number:]'模板来检查它是否与一个数字匹配。 – Eimantas 2012-07-06 14:49:33