2014-07-02 36 views
2

我需要檢查文本是整數還是十進制數。正則表達式,以檢查iOS中的整數或十進制數

我嘗試使用以下內容:

NSString *expression = @"\\d*";   
NSError *error ; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression options:NSRegularExpressionCaseInsensitive error:&error]; 
NSTextCheckingResult *isValid = [regex firstMatchInString:txt options:0 range:NSMakeRange(0, [txt length])]; 

但結果是正確的,即使文字2.14.256

+0

如果stringVal包含字母,[stringVal的doubleValue]返回0 –

回答

2

@Yogesh:謝謝老兄。但是,這個正則表達式適合我的需求。

- (BOOL)numberValidation:(NSString *)text { 
    NSString *regex = @"^([0-9]*|[0-9]*[.][0-9]*)$"; 
    NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; 
    BOOL isValid = [test evaluateWithObject:text]; 
    return isValid; 
} 

+0

如果您的答案可以幫助您,請接受您的答案,以便其他用戶使用它。 :) –

+0

這個正則表達式也爲點(。)返回TRUE,我認爲這不應該。 –

0

使用NSPredicate檢查號驗證與正則表達式

- (BOOL)numberValidation:(NSstring *)text { 
    NSString *regex = @"^([0-9]+)?$"; 
    NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; 
    BOOL isValid = [test evaluateWithObject:text]; 
    return isValid; 
} 
+0

更簡單:'[text rangeOfString:regex選項:NSRegularExpressionSearch]' – zaph

+0

這個正則表達式對於像1.2這樣的十進制數不會返回TRUE。 –

0
+ (BOOL)isStringADecimalNumber:(NSString *)string 
{ 
    NSString *regex = @"(\[+\]|-)?((\[0-9\]+\[.\]?\[0-9\]*)|(\[0-9\]*\[.\]?\[0-9\]+))"; 

    NSPredicate *test = \[NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex\]; 

    BOOL stringIsADecimalNumber = \[test evaluateWithObject:string\]; 

    return stringIsADecimalNumber; 
} 

下面重點,是對這個表達式返回TRUE的數字: enter image description here enter image description here