美文网首页
【ios学习记录】- UITextField输入浮点数的限制

【ios学习记录】- UITextField输入浮点数的限制

作者: 鸥声奇幻旅程 | 来源:发表于2016-05-10 10:17 被阅读311次

    通常在编辑框中输入一些货品数量,金额时,我们都会做一些输入的判断限制。例如不能输入非法字符,只能输入数字等等。现把最近遇到的一些输入限制需求展现如下:

    1、输入小数位不能超过两位;
    2、不能重复输入小数点;
    3、不能输入除数字以外的字符(但不包括退格键,负号键);
    4、限制长度为最小为1,最大为11。

    为了实现以上需求,主要是依靠以下UITextFieldDelegate的一个协议方法来实现的:

    - (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
    
    功能:
      把textField中位置为range的字符串替换为string字符串;
      此函数在textField内容被修改时调用;
    
    返回值:
      YES,表示修改生效;NO,表示不做修改,textField的内容不变。
    
    参数说明:
      textField:响应UITextFieldDelegate协议的UITextField控件。
      range:    UITextField控件中光标选中的字符串,即被替换的字符串;
              range.length为0时,表示在位置range.location插入string。
      string:    替换字符串;
        string.length为0时,表示点击了删除delete键。
    

    以下所有的代码需要写在该函数中。

    1、输入小数位不能超过两位

    /**
    
     *  检查浮点数小数位并校验小数点合法性
     *
     * @param range     浮点数总长度
     * @param dotPlaces 小数位
     * @param decimal   浮点数
     * @param string    当前输入的数值
     *
     * @return YES:没有小数点或者限制两位浮点数
     */
    
    + (BOOL)checkDecimalDotPlaces:(NSRange)range dotPlaces:(NSNumber *)dotPlaces decimal:(NSString *)decimal{
    
        BOOL bHaveDot = false;
    
        if (dotPlaces.integerValue < 0) {
              dotPlaces = @0;
        }
    
        if ([decimal rangeOfString:@"."].location == NSNotFound){
             bHaveDot = false;
        }else{
             bHaveDot = true;
        }
    
        if (bHaveDot) {
          //判断小数点的位数
          NSRangeran = [decimal rangeOfString:@"."];
    
          if(range.location- ran.location > dotPlaces.integerValue) {    
          returnNO;
        }
     }
        returnYES;
    }
    

    2、不能重复输入小数点

    //不能再输入小数点
    
    if ([string rangeOfString:@"."].location != NSNotFound&& [textField.text rangeOfString:@"."].location ==NSNotFound) {
    
    returnNO;
    
    }
    

    3、不能输入除数字以外的字符(但不包括退格键,负号键)

         //不能输入字符串
           if ([string rangeOfString:@"."].location == NSNotFound)              {
                NSRange range = [string rangeOfString:@"^[0-9-]+$"options:NSRegularExpressionSearch];
                if(range.location== NSNotFound) {
                     returnNO; 
                }
           }
    
        //删除delete键
          if([string isEqualToString:@""])
          {
                returnYES;
          }
    

    4、限制长度为最小为1位,最大为11位

        NSString*pwdRegex = @"[0-9]{1,10}";
        NSPredicate*predicate = [NSPredicate predicateWithFormat:@"SELFMATCHES%@",pwdRegex];
    
        if([predicate evaluateWithObject:textField.text]|| ![textField.text notEmpty]) {
            returnYES;
        }else{
            returnNO;
        }
    

    另外,对于字符串的判断可以选择在NSString的分类扩展里进行设置,如NSString+Extension。

    总代码如下:

    - (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string{
    
        //不能再输入小数点
        if ([string rangeOfString:@"."].location != NSNotFound&& [NSStringisHaveDot:textField.text]) {
            returnNO;
        }
    
        //delete
        if ([string isEqualToString:@""]) {
            returnYES;
    
        }
    
        //不能输入字符串
        if ([string rangeOfString:@"."].location == NSNotFound) {
            NSRangerange = [string rangeOfString:@"^[0-9]+$"options:NSRegularExpressionSearch];
             if(range.location== NSNotFound) {     
                  returnNO;
             }
        }
    
        //限制长度为最小为1,最大为11位
        NSString *pwdRegex = @"[0-9]{1,10}";
        NSPredicate*predicate = [NSPredicate predicateWithFormat:@"SELFMATCHES%@",pwdRegex];
    
        if([predicate evaluateWithObject:textField.text]|| ![textField.text notEmpty]) {
            returnYES;
        }else{
            returnNO;
        }
             
        //限制小数位长度不超过2
        if (![NSString checkDecimalDotPlaces:range dotPlaces:ZHJFloatDotPlaces decimal:textField.text]) {
             returnNO;
        }
    
        returnYES;
    }
    

    相关文章

      网友评论

          本文标题:【ios学习记录】- UITextField输入浮点数的限制

          本文链接:https://www.haomeiwen.com/subject/ujxyrttx.html