UITextField限制输入两位小数

swift版本限制金额输入(两位小数)

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
    if string == "." && textField.text?.count == 0 {
            textField.text = "0."
        }
        let newString = (textField.text! as NSString).replacingCharacters(in: range, with: string)
        let expression = "^[0-9]*((\\.|,)[0-9]{0,2})?$"
        let regex = try! NSRegularExpression(pattern: expression, options: NSRegularExpression.Options.allowCommentsAndWhitespace)
        let numberOfMatches = regex.numberOfMatches(in: newString, options:NSRegularExpression.MatchingOptions.reportProgress, range: NSMakeRange(0, (newString as NSString).length))
        return numberOfMatches != 0
}

OC版本限制金额输入

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:      (NSString *)string{
//    限制只能输入数字
BOOL isHaveDian = YES;
if ([string isEqualToString:@" "]) {
    return NO;
}

if ([textField.text rangeOfString:@"."].location == NSNotFound) {
    isHaveDian = NO;
}
if ([string length] > 0) {
    
    unichar single = [string characterAtIndex:0];//当前输入的字符
    if ((single >= '0' && single <= '9') || single == '.') {//数据格式正确
        
        if([textField.text length] == 0){
            if(single == '.') {
                
                [textField.text stringByReplacingCharactersInRange:range withString:@""];
                return NO;
            }
        }
        
        //输入的字符是否是小数点
        if (single == '.') {
            if(!isHaveDian)//text中还没有小数点
            {
                isHaveDian = YES;
                return YES;
                
            }else{
                
                [textField.text stringByReplacingCharactersInRange:range withString:@""];
                return NO;
            }
        }else{
            if (isHaveDian) {//存在小数点
                
                //判断小数点的位数
                NSRange ran = [textField.text rangeOfString:@"."];
                if (range.location - ran.location <= 2) {
                    return YES;
                }else{
                    
                    return NO;
                }
            }else{
                return YES;
            }
        }
    }else{//输入的数据格式不正确
        
        [textField.text stringByReplacingCharactersInRange:range withString:@""];
        return NO;
    }
}
else
{
    return YES;
}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容