2014-07-02 2 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: параметры регулярного выражения: NSRegularExpressionSearch]' – zaph

+0

Это регулярное выражение не возвращает TRUE для десятичных чисел, таких как 1.2. –

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