2016-09-22 8 views
0

У меня есть приложение iOS с UITextField, которое позволяет пользователю вводить число. Как я могу гарантировать, что значение, которое пользователь вводит, является допустимым числом (либо целым или десятичной). Вот то, что я пробовал, но по какой-то причине он не будет работать для десятичных чисел:Проверьте правильность номера NSString - целое или десятичное число

NSCharacterSet *notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; 

if ([numString rangeOfCharacterFromSet:notDigits].location == NSNotFound) { 
    NSLog(@"valid number"); 
} 

else { 
    NSLog(@"invalid number"); 
} 

Если я ввести десятичное число, например, 435.634, приведенный выше код возвращает «недопустимый номер» в журнале консоли. Я не понимаю, почему это не работает, поскольку я использую decimalDigitCharacterSet?

+0

Используйте 'NSNumberFormatter', чтобы он правильно обрабатывал определенные номера. – rmaddy

+0

Набор 'decimalDigitCharacterSet' содержит цифры, а не знаки препинания. – rmaddy

+0

@Supertecnoboff - еще один вариант - предоставить пользователю цифровую клавиатуру. Больше не нужно беспокоиться ни о чем другом - https://www.cocoacontrols.com/search?q=numeric –

ответ

1

Благодаря @rmaddy за помощь мне, вот решение я использую в случае, если кто интересуется:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
formatter.numberStyle = NSNumberFormatterDecimalStyle; 
NSNumber *myNumber = [formatter numberFromString:inputNumString]; 

if (myNumber != nil) { 
    NSLog(@"valid number"); 
} 

else { 
    NSLog(@"invalid number"); 
} 

Это будет работать, даже если число целое или десятичное. Он также работает с разными языковыми десятичными символами, такими как ,

+1

Спасибо. Сохранено мое время. – HongchaoZhang