- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if (string.length == 0) {
return YES;
}
BOOL isHaveDian = NO;
BOOL willHaveDian = NO;
// 判断是否有小数点
if ([textField.text containsString:@"."]) {
isHaveDian = YES;
} else {
isHaveDian = NO;
}
if ([string containsString:@"."]) {
willHaveDian = YES;
} else {
willHaveDian = NO;
}
if (string.length > 0) {
if (string.length > 1) {
NSString *regex = @"^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"; // 小数
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
BOOL isCode = [pred evaluateWithObject:string];
if (!isCode) {
MYLog(@"正则-您输入的格式不正确");
return NO;
}
}
// 当前输入的字符
unichar single = [string characterAtIndex:0];
// 不能输入.0~9以外的字符
if (!((single >= '0' && single <= '9') || single == '.')){
MYLog(@"您输入的格式不正确");
return NO;
}
// 只能有一个小数点
if (isHaveDian && single == '.') {
MYLog(@"只能输入一个小数点");
return NO;
}
if (isHaveDian && willHaveDian) {
MYLog(@"只能输入一个小数点");
return NO;
}
// 如果第一位是.则前面加上0
if ((textField.text.length == 0) && (single == '.')) {
textField.text = @"0";
}
// 如果第一位是0则后面必须输入.
if ([textField.text hasPrefix:@"0"]) {
if (textField.text.length > 1) {
NSString *secondStr = [textField.text substringWithRange:NSMakeRange(1, 1)];
if (![secondStr isEqualToString:@"."]) {
NSLog(@"第二个字符必须是小数点");
return NO;
}
} else {
if (![string isEqualToString:@"."]) {
NSLog(@"第二个字符必须是小数点");
return NO;
}
}
}
NSInteger pointNum = 2;
// 小数点后最多能输入两位
if (isHaveDian || willHaveDian) {
NSString *tobeString = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSRange ran = [tobeString rangeOfString:@"."];
if ((tobeString.length - ran.location - 1) > pointNum) {
NSRange r = NSMakeRange(ran.location + 1, tobeString.length - ran.location - 1);
NSString *frontString = [tobeString substringToIndex:r.location];
NSString *behindString = [[tobeString substringWithRange:r] substringToIndex:pointNum];
NSString *fianlString = [NSString stringWithFormat:@"%@%@",frontString,behindString];
textField.text = fianlString;
NSLog(@"只能输入二两位小数");
return NO;
}
}
}
return YES;
}
iOS两位小数终极判断
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 我只是一个辛勤的搬运工。原文在这里 对这个fmodf() c函数很好奇,到底表示什么意思呢。发扬一下刨根问底的精神...
- 本次控制输入需求: 1、只能输入数字keyboardType = UIKeyboardTypeDecimalPad...
- 在输入金额的UITextField中,要给予三个规则的判断 只能输入数字(可以通过设置键盘类型为Decimal P...
- 需求 如题的需求,再详细解释一下就是:1.如果有两位小数不为0则保留两位小数,eg: "0.23"2.如果有一位小...