iOS电商项目金额输入判断处理

产品的需求:

  1. 只能输入数字和保留两位小数,设置keyboardType UIKeyboardTypeDecimalPad即可
  2. 可以输入0,继续输入数字则把0抹掉,输入小数点则还可以继续输入两位数字,不能输入多个小数点

基本代码如下

/// <UITextFieldDelegate> 小数点前8位数字 小数点后2位
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    
    NSString *toString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    if (toString.length > 0) {
        NSString *stringRegex = @"(([0]|(0[.]\d{0,2}))|([1-9]\d{0,8}(([.]\d{0,2})?)))?";
        NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", stringRegex];
        BOOL flag = [phoneTest evaluateWithObject:toString];
        //判断如果第一位输入0 第二位不是小数点的话就把0抹掉
        if ([textField.text hasPrefix:@"0"] && textField.text.length == 1 && ![string isEqualToString:@"."]) {
            self.moneyInputTextfield.text = [string substringFromIndex:1];
            return YES;
        }
        if (!flag) {
            return NO;
        }
    }
    return YES;
}

原文地址:https://www.cnblogs.com/wgb1234/p/13939189.html