2012-07-06 208 views
1

如何檢查給定的輸入是字符串還是雙精度?我試過[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

回答

1

您可以使用正則表達式和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

1

做它用strtodreference)爲您提供分析的最後一個字符「C」的方式:

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

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

更多詳情here

相關問題