iOS TextField輸入價格,只能輸入數字、小數點且保留兩位
阿新 • • 發佈:2019-01-06
1.只能輸入.0~9,其他字元不可輸入
2.有且只有一個小數點
3.第一個字元為0,第二個必須輸入.
4.第一個字元為. 前面自動加0
5.小數點後面最多隻能輸入兩位
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
BOOL isHaveDian;
//判斷是否有小數點
if ([textField.text containsString:@"."]) {
isHaveDian = YES ;
}else{
isHaveDian = NO;
}
if (string.length > 0) {
//當前輸入的字元
unichar single = [string characterAtIndex:0];
NSLog(@"single = %c",single);
//不能輸入.0~9以外的字元
if (!((single >= '0' && single <= '9') || single == '.')){
NSLog (@"您輸入的格式不正確");
return NO;
}
//只能有一個小數點
if (isHaveDian && single == '.') {
NSLog(@"只能輸入一個小數點");
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;
}
}
}
//小數點後最多能輸入兩位
if (isHaveDian) {
NSRange ran = [textField.text rangeOfString:@"."];
//由於range.location是NSUInteger型別的,所以不能通過(range.location - ran.location) > 2來判斷
if (range.location > ran.location) {
if ([textField.text pathExtension].length > 1) {
NSLog(@"小數點後最多有兩位小數");
return NO;
}
}
}
}
return YES;
}