• iOS textField输入金额的限制,小数点前9位,后面两位


    iOS textField输入金额的限制,小数点前9位,后面两位,如果不加小数点,最大位数是9位,加上小数点,最大位数是12位,超出最大位数可删除

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

        // 判断是否输入内容,或者用户点击的是键盘的删除按钮

        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;

    }

  • 相关阅读:
    Leetcode 191.位1的个数 By Python
    反向传播的推导
    Leetcode 268.缺失数字 By Python
    Leetcode 326.3的幂 By Python
    Leetcode 28.实现strStr() By Python
    Leetcode 7.反转整数 By Python
    Leetcode 125.验证回文串 By Python
    Leetcode 1.两数之和 By Python
    Hdoj 1008.Elevator 题解
    TZOJ 车辆拥挤相互往里走
  • 原文地址:https://www.cnblogs.com/dududuzhaoji/p/5732482.html
Copyright © 2020-2023  润新知