- (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.如果有一位小...