1. 程式人生 > >iOS TextField輸入價格,只能輸入數字、小數點且保留兩位

iOS TextField輸入價格,只能輸入數字、小數點且保留兩位

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; }