UITextField在小数位前保留最多10个数字,在小数点后最多保存3个数字

Nin*_*ja9 0 objective-c ios

我正在寻找一个代码,允许我在小数位前保留最多10个数字,在小数点后最多保存3个数字.

有效的例子是:1234567899.123 - 十进制前最多10个数字和小数点后3个数字.

123.123 - 小数点前少于10个数字好.

123456.1 - 小数点后少于3个数字.

123 - 好的

我在下面使用这个功能:

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

    NSString *newStrn = [textField.text stringReplacingCharactersInRange: range withString: string];

    NSArray *arrayofStrn = [newStrn componentsSeparatedByString:@"."]; //to keep only one decimal
    if([arrayofStrn count]> 2) {

        return NO;
    }
    else {

        return YES;
    }
}
Run Code Online (Sandbox Code Playgroud)

不知道如何进一步保持十进制前10个数字(小于10个正常)的最大限制和小数点后3个数字的最大限制(少于3个数字或小数点后没有数字).

非常感谢你们!

Pau*_*l.s 5

你可以通过像这样的简单正则表达式实现这一点

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
{
  NSString *editedString = [textField.text stringReplacingCharactersInRange:range withString:string];

  NSString    *regex     = @"\\d{0,10}(\\.\\d{0,3})?"
  NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

  return [predicate evaluateWithObject:editedString];
}
Run Code Online (Sandbox Code Playgroud)

我用以下输入测试了上面的内容

@"1234567891",      //=> YES
@"12345678912",     //=> NO
@"1234567891.122",  //=> YES
@"1234567891.1234", //=> NO
@".123",            //=> YES
Run Code Online (Sandbox Code Playgroud)