NSScanner
отлично справится с этой работой. В отличие от -[NSString doubleValue]
, его scanDouble:
может анализировать, а затем также рассказать вам, потребляет ли он всю строку, поэтому вы будете знать, что присутствуют нечисловые символы.
Демонстрация на некоторых тестовых примерах. См. Комментарии для описания ожидаемых результатов.
NSArray * texts = @[// First four unacceptable because non-numeric
@"", @"Hello, world!", @"1.0 excelsior", @"Jiminy 1.0 Crickets",
// These three unacceptable because 0 or less
@"0.0" @"0", @"-2048",
// Last three are good
@"3.14159", @"1", @"10000000000.0"];
for(NSString * text in texts){
NSScanner * scanner = [NSScanner scannerWithString:text];
double val;
[scanner scanDouble:&val];
// Scanned the whole string and ended up with a positive value
if([scanner isAtEnd] && val > 0){
NSLog(@"'%@'? I accept.", text);
}
else {
NSLog(@"'%@' is no good.", text);
}
}
Спасибо! Он работает, но @ "" и @ "" кажется не работает. Поэтому необходимо добавить text.length> 0. Я выводил [сканирование scanDouble: & val] и [scanner isAtEnd], если текст является числом? Потому что, если я хочу только номер (даже отрицательный), и я делаю -> if (([scanner isAtEnd]) && (seizure.text.length> 0)), он отлично работает. –
Эта процедура отклоняет '@" "' (пустую строку) и строку, состоящую только из пробелов, потому что они не являются числовыми, и вы сказали, что не хотите отрицательных чисел. Я могу изменить это, если это не совсем правильно. –
Я сделал это сам. Спасибо вам, Джош :-) –