检查UITextField的数值是否大于0

时间:2013-07-04 01:38:48

标签: ios objective-c uitextfield

我有一个UITextField,我只想要一个大于0的数字(我不想要非数字字符或值0)

这是我检查它是否为空的方式:

if(seizure.text.length==0)

这是我检查它是否等于0的方式:

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

如何检查非数字字符?

3 个答案:

答案 0 :(得分: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.");

答案 1 :(得分: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);
    }
}

答案 2 :(得分:1)

如果[seizure.text doubleValue] == 0是零的文本表示,如果它不包含数字的有效文本表示,则

seizure.text将为真(请参阅文档doubleValue)。

换句话说,如果此表达式为false,那么您有一个以数字开头的字符串值。但是,您仍然不知道字符串值是否只包含一个数字,例如[@"2.5 miles" doubleValue]的值为2.5。如果您需要处理这样的字符串,您应该查看NSScanner