1

があり、UITextField0 より大きい数値のみが必要です (数値以外の文字や値 0 は必要ありません)

これは、空かどうかを確認する方法です。

if(seizure.text.length==0)

これは、0 に等しいかどうかを確認する方法です。

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

数字以外の文字を確認するにはどうすればよいですか?

4

3 に答える 3

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.");
于 2013-07-04T02:54:42.010 に答える
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);
    }
}
于 2013-07-04T04:04:44.613 に答える
1

[seizure.text doubleValue] == 0seizure.textがゼロのテキスト表現である、数値の有効なテキスト表現が含まれていない場合に true になります( のドキュメントを参照してくださいdoubleValue)。

つまり、この式が false の場合、数値で始まる文字列値が得られます。ただし、文字列の値に数値のみが含まれているかどうかはまだわかりません。たとえば[@"2.5 miles" doubleValue]、値が2.5. このような文字列を処理する必要がある場合は、NSScanner.

于 2013-07-04T02:10:59.050 に答える