• UITextField 的限制输入金额(可为小数的正确金额)


    要判断输入金额为正确金额的方法有两个,一个是用正则表达式,另一个就是用textfield的代理方法

    有时候难免遇到这样的需求,不符合规则的金额就不让输入时,那用这种方法比较合理

    如果设置输入键盘为Decimal Pad时,输入为数字和小数点;如果设置键盘为Number Pad时,输入为纯数字
    非以上情况时,那要判断输入时是否为合理输入,如代码里

    (single >='0' && single<='9') || single=='.'

    如果本身仅仅是输入数字或者小数点而已,那么可以去掉这个判断条件

    下面这个限制输入金额限制得很死:

    1.要求用户输入首位不能为小数点;

    2.小数点后不超过两位,小数点无法输入超过一个;

    3.如果首位为0,后面仅能输入小数点

    4.输入金额不超过11位 

    这个输入首位不能为0时,可以在限制首位不能为“.”的地方加上,可以根据自己需要修改.

    if(single == '.'){
      [textField.text stringByReplacingCharactersInRange:range withString:@""];
      return NO;                        
    }

    但这个金额能输入0.00之类的,输入需要的话还得在发生请求数据前判断空值和输入最低金额允许,不符合时就return;

    限制如下:

     1 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
     2 {
     3     if (textField.text.length > 10) {
     4         return range.location < 11;
     5     }else{
     6         BOOL isHaveDian = YES;
     7         if ([textField.text rangeOfString:@"."].location==NSNotFound) {
     8             isHaveDian=NO;
     9         }
    10         if ([string length]>0)
    11         {
    12             unichar single=[string characterAtIndex:0];//当前输入的字符
    13             
    14             if ((single >='0' && single<='9') || single=='.')//数据格式正确
    15             {
    16                 //首字母不能为小数点
    17                 if([textField.text length]==0){
    18                     if(single == '.'){
    19                         [textField.text stringByReplacingCharactersInRange:range withString:@""];
    20                         return NO;
    21                         
    22                     }
    23                 }
    24                 if([textField.text length]==1 && [textField.text isEqualToString:@"0"]){
    25                     if(single != '.'){
    26                         [textField.text stringByReplacingCharactersInRange:range withString:@""];
    27                         return NO;
    28                         
    29                     }
    30                 }
    31                 if (single=='.')
    32                 {
    33                     if(!isHaveDian)//text中还没有小数点
    34                     {
    35                         isHaveDian=YES;
    36                         return YES;
    37                     }else
    38                     {
    39                         [textField.text stringByReplacingCharactersInRange:range withString:@""];
    40                         return NO;
    41                     }
    42                 }
    43                 else
    44                 {
    45                     if (isHaveDian)//存在小数点
    46                     {
    47                         //判断小数点的位数
    48                         NSRange ran=[textField.text rangeOfString:@"."];
    49                         NSInteger tt=range.location-ran.location;
    50                         if (tt <= 2){
    51                             return YES;
    52                         }else{
    53                             return NO;
    54                         }
    55                     }
    56                     else
    57                     {
    58                         return YES;
    59                     }
    60                 }
    61             }else{//输入的数据格式不正确
    62                 [textField.text stringByReplacingCharactersInRange:range withString:@""];
    63                 return NO;
    64             }
    65         }
    66         else
    67         {
    68             return YES;
    69         }
    70     }
    71 }
  • 相关阅读:
    Spring解决循环依赖的三种方式
    MySQL深度分页
    MySQL大数据量分页查询方法及其优化
    java进程 cpu100%问题排查
    Java线程池如何合理配置核心线程数
    Btree和B+tree的区别
    Python3 for Linux 安装
    redis sentinel 相关参数及命令
    postman 连接mysql
    oracle-数据库的各种-锁-详解
  • 原文地址:https://www.cnblogs.com/fcug/p/5500349.html
Copyright © 2020-2023  润新知