zoukankan      html  css  js  c++  java
  • 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分类专题(五)——动态规划1-子序列
    LeetCode分类专题(四)——双指针和滑动窗口1
    LeetCode分类专题(三)——二分查找1
    消息队列(一)——Kafka概述
    Java多线程(五)——synchronized关键字原理
    Java多线程(四)——volatile关键字原理
    Redis(五)——主从复制、哨兵
    Redis(四)——过期、持久化、事件
    Redis(三)——底层数据结构
    MySQL知识点
  • 原文地址:https://www.cnblogs.com/dududuzhaoji/p/5732482.html
Copyright © 2011-2022 走看看