1

このコードを次のように試しました

これは、ユーザーが数字とドット (小数点) のみを入力できるようにするのに役立ちます

しかし問題は、ユーザーがこのメソッドで n 個の小数点以下を許可できることです。

小数点以下1桁だけを許可したい

小数点以下 2 桁のみ

123.00 、 123423432353.99 と 同様ですが、 123.4.4 、 123.12345、123...23 とは異なります

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{


      if (string.length == 0) {
            return YES;
      }
      NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789."];
      for (int i = 0; i < [string length]; i++) {
            unichar c = [string characterAtIndex:i];
            if ([myCharSet characterIsMember:c]) {
                  return YES;
            }
      }
      UIAlertView *av = [[UIAlertView alloc] initWithTitle:nil message:@"Invalid input" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
      [av show];
      return NO;

}

ユーザーが小数点以下 2 桁のみを許可するテキスト フィールドに小数点以下 1 桁のみを入力できるようにする方法

前もって感謝します

4

2 に答える 2

5

ベスト プラクティス電子メール、電話番号、通貨などの文字列形式の検証を実行する必要がある場合は常に、RegularExpressions を使用してください。

これは確かにあなたの問題を解決します。以下のサンプルコード:

最初に NSRegularExpression のインスタンスを作成します

NSError error;
NSRegularExpression * regExp = [[NSRegularExpression alloc]initWithPattern:@"^\\d{0,10}(([.]\\d{1,2})|([.]))?$" options:NSRegularExpressionCaseInsensitive error:&error];

次に、関連するメソッドで使用します。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range    replacementString:(NSString *)string {

    NSString * existingText = textField.text;
    NSString * completeText = [existingText stringByAppendingFormat:@"%@",string];

    if ([regExp numberOfMatchesInString:completeText options:0 range:NSMakeRange(0, [completeText length])]) 
    {
        if ([completeText isEqualToString:@"."])
        [textField insertText:@"0"];
        return YES;
    }
    else
     return NO;
 }

使用して、動作するかどうかをお知らせください。

于 2013-05-04T10:20:13.587 に答える
1

これを使ってみてください...あなたの役に立つかもしれませんので、あなたの機能を実装してください.このコードは「.」の後の2桁だけです.

 NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    NSArray *sep = [newString componentsSeparatedByString:@"."];
    if([sep count]>=2)
    {
        NSString *sepStr=[NSString stringWithFormat:@"%@",[sep objectAtIndex:1]];
        return !([sepStr length]>2);
    }
    return YES;
于 2013-05-04T10:15:06.810 に答える