iOS金额输入限制

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

UITextField *countTextField = self.moneyTF;
NSString *NumbersWithDot = @".1234567890";
NSString *NumbersWithoutDot = @"1234567890";

// 判断是否输入内容,或者用户点击的是键盘的删除按钮
if (![string isEqualToString:@""]) {
    
    NSCharacterSet *cs;
    
    if ([textField isEqual:countTextField]) {
        
        // 小数点在字符串中的位置 第一个数字从0位置开始
        
        NSInteger dotLocation = [textField.text rangeOfString:@"."].location;
        
        
        
        // 判断字符串中是否有小数点
        // NSNotFound 表示请求操作的某个内容或者item没有发现,或者不存在
        
        // range.location 表示的是当前输入的内容在整个字符串中的位置,位置编号从0开始
        
        if (dotLocation == NSNotFound ) {
            
            // -- 如果限制非第一位才能输入小数点,加上 && range.location != 0
            
            
            // 取只包含“myDotNumbers”中包含的内容,其余内容都被去掉
            
            /*
             
             [NSCharacterSet characterSetWithCharactersInString:myDotNumbers]的作用是去掉"myDotNumbers"中包含的所有内容,只要字符串中有内容与"myDotNumbers"中的部分内容相同都会被舍去
             
             
             
             在上述方法的末尾加上invertedSet就会使作用颠倒,只取与“myDotNumbers”中内容相同的字符
             
             */
            
            cs = [[NSCharacterSet characterSetWithCharactersInString:NumbersWithDot] invertedSet];
            
            if (range.location >= 9) {
                
                NSLog(@"单笔金额不能超过亿位");
                
                if ([string isEqualToString:@"."] && range.location == 9) {
                    
                    return YES;
                    
                }
                
                
                
                return NO;
                
            }
            
        }else {
            
            cs = [[NSCharacterSet characterSetWithCharactersInString:NumbersWithoutDot] invertedSet];
            
        }
        
        
        
        // 按cs分离出数组,数组按@""分离出字符串
        
        NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
        
        BOOL basicTest = [string isEqualToString:filtered];
        
        if (!basicTest) {
            
            NSLog(@"只能输入数字和小数点");
            
            return NO;
            
        }
        
        
        
        if (dotLocation != NSNotFound && range.location > dotLocation + 2) {
            
            NSLog(@"小数点后最多两位");
            
            return NO;
            
        }
        
        
        
        if (textField.text.length > 11) {
            
            return NO;
            
        }
        
    }
    
}



return YES;

}

推荐阅读更多精彩内容