价格ui文本字段:如何允许用户只在文本字段中输入一个小数点,价格为283.99

iOS*_*dev 1 iphone objective-c uitextfield nspredicate

我试过这个代码如下

这有助于我允许用户输入数字和点(小数点)

问题是用户可以在此方法中允许n个小数.

我想只允许一个小数

并且只有两位数后才会出现

喜欢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;

}
Run Code Online (Sandbox Code Playgroud)

如何允许用户只输入一个十进制文本字段,该字段也只允许小数点后的两位数

提前致谢

gag*_*rma 5

最佳实践只要您必须执行任何字符串格式验证,如电子邮件,电话号码,货币等,请使用RegularExpressions .

这肯定会解决你的问题.这里的示例代码如下:

首先创建NSRegularExpression的实例

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

然后使用您的相关方法:

- (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;
 }
Run Code Online (Sandbox Code Playgroud)

使用并告诉我它是否有效.