0

こんにちは、次のコードを使用しているので、システムはテキスト ボックスに入力する数値のみを検証します。これで問題ありません。ただし、1つのテキストフィールドで、おそらく正規表現を使用して、0.5から24までの数値のみを検証する必要があることに気付きました。正規表現を正しく取得する方法を見つけたとしても、関数にどのように組み込むかは数字のみを許可し、0.5 から 24 までの数字のみを許可します。基本的に、人々は 1 日 30 分から 24 時間の間でデバイスを使用することを選択できます。フィールドを 0 のままにするとエラーになります。

私がここでやろうとしたのは、最大24になるように設定されるフィールドであるテキストフィールド2をトラップすることです.

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range      replacementString:(NSString *)string
        {
    // First, create the text that will end up in the input field if you'll return     YES: 
        if (textField == textField2) {   }
        NSString *resultString = [textField.text stringByReplacingCharactersInRange:range     withString:string];
        NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];   
        [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
        NSNumber* resultingNumber =     [numberFormatter numberFromString:resultString];       
       //[numberFormatter release];
        return     resultingNumber != nil;
   }
4

3 に答える 3

1

この正規表現を使用します(^([1][0-9]|[2][0-4]|(0?)[1-9])((.[0-9] )?)|0[.] [5-9][0-9] $) 0.5 から 24 までの数値を検証します。

于 2013-06-27T03:55:23.813 に答える
0

私は最近似たようなことをしましたが、あなたの状況に適応させようとします。私がコードの行を盗んだ場合、新しいコードをリッピングする前に私を呼び出してください...それは遅いです;)

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSError *error = NULL;
    //check for text being pasted vs valid decimal
    //below regex will check for a decimal number with a precision of 2

    NSRegularExpression *regexNumeric = [[NSRegularExpression alloc]initWithPattern:@"^([0-9]+)?(\\.([0-9]{1,2})?)?$" options:NSRegularExpressionCaseInsensitive error:&error];
    if ([regexNumeric numberOfMatchesInString:string options:0 range:NSMakeRange(0, [string length])] > 0)
    {
        //found a valid entry
        switch ([string length])
        case 0:
        case 1:
        {
            //this is always a valid entry since the field is either empty or 0-9 or .
            return YES;
            break;
        }
        case 2:
        {
            //Need to handle whole numbers, decimals starting with ".", and a decimal starting with "0." which is valid
            if ((([string floatValue] <= 24.0) && ([string floatValue] >= 0.5)) || ([string isEqualToString:@"0."]))
            {
                return YES;
            }
            else
            {
                return NO;
            }
            break;
        }
        case 3:
        case 4:
        case 5:
        {
            //will handle all other cases
            if (([string floatValue] <= 24.0) && ([string floatValue] >= 0.5))
            {
                return YES;
            }
            else
            {
                return NO;
            }
            break;
        }
        default:
        {
            //no idea how you got here!
            return NO;
        }
    }
    else
    {
        return NO;
    }
}
于 2013-06-27T03:53:43.523 に答える