2013-07-04 4 views
1

У меня есть UITextField, и я хочу только число больше 0 (я не хочу нечисловых символов или значение 0)Проверьте, чтобы увидеть, если UITextField имеет числовое значение больше 0

Это как Я проверяю, чтобы увидеть, если он пуст:

if(seizure.text.length==0) 

Это, как я могу проверить, чтобы увидеть, если он равен 0:

else if(seizure.text doubleValue]==0) 

Как я могу проверить для нечисловых символов?

ответ

2

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); 
    } 
} 
+0

Спасибо! Он работает, но @ "" и @ "" кажется не работает. Поэтому необходимо добавить text.length> 0. Я выводил [сканирование scanDouble: & val] и [scanner isAtEnd], если текст является числом? Потому что, если я хочу только номер (даже отрицательный), и я делаю -> if (([scanner isAtEnd]) && (seizure.text.length> 0)), он отлично работает. –

+0

Эта процедура отклоняет '@" "' (пустую строку) и строку, состоящую только из пробелов, потому что они не являются числовыми, и вы сказали, что не хотите отрицательных чисел. Я могу изменить это, если это не совсем правильно. –

+0

Я сделал это сам. Спасибо вам, Джош :-) –

1

[seizure.text doubleValue] == 0 будет истинным либо если seizure.text это текстовое представление нуля или, если она не содержит действительное текстовое представление числа (смотрите документацию для doubleValue).

Другими словами, если это выражение ложно, то у вас есть строковое значение, которое начинается с числа. Однако вы все еще не знаете, имеет ли значение строки только число, например. [@"2.5 miles" doubleValue] имеет значение 2.5. Если вам нужно обрабатывать такие строки, вы должны посмотреть на NSScanner.

3

Сначала проверьте, чтобы увидеть, если у вас есть какие-либо символы в строке, а затем проверить, чтобы убедиться, что он содержит только числовые символы, и, наконец, проверить, если значение больше 0:

if (seizure.text.length > 0) 
{ 
    NSCharacterSet *nonNumbers = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; 
    if ([seizure.text rangeOfCharacterFromSet:nonNumbers].location == NSNotFound) 
    { 
     if ([seizure.text doubleValue] > 0) 
     { 
      // Text Field contains a numeric value greater than 0 
      NSLog(@"Good number."); 
      return; 
     } 
    } 
} 

// If we make it to here, it does not meet your requirements. 
NSLog(@"Bad Number."); 
Смежные вопросы