美文网首页Edison关于iOSNode.js
textField如何限制金额输入

textField如何限制金额输入

作者: 明月钓无痕 | 来源:发表于2016-12-15 11:45 被阅读49次

    在文本框里输入金额的话,顾名思义,就是小数点之后只有两位数.我们知道textFiled 的代理- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;是对文字进行限制的.如果返回 NO, 则文字不能改变.那么就在这里动手脚.

    // 输入金额 限制两个小数
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
        if ([textField.text containsString:@"."]) {
            if ([string isEqualToString:@"."]) return NO;
            NSRange rangeOfPoint = [textField.text rangeOfString:@"."];
            if (range.location > rangeOfPoint.location + 2) return NO;
        }
        return YES;
    }
    

    这是最开始的写法,确实可以限制文字的输入.但是在某次测试时,发现,当光标位置生改变之后,就会出问题,而且对于复制粘贴,无法控制.
    所以下面改了一下思路, 使用正则表达式进行控制.

    // 输入金额 限制两个小数
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
       // 获取光标
       UITextRange *textRange = textField.selectedTextRange;
       NSNumber *number = [textRange.start valueForKey:@"offset"];
       NSMutableString *str = [textField.text mutableCopy];
       [str insertString:string atIndex:[number integerValue]];
     // 判断是否是金额格式 (PS: 在分类里面)
       if ([str isMoney]) {
           return YES;
       } else {
           return NO;
       }
    }
    

    这是NSString 的分类

    - (BOOL)match:(NSString *)pattern
    {
        // 1.创建正则表达式
        NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
        // 2.测试字符串
        NSArray *results = [regex matchesInString:self options:0 range:NSMakeRange(0, self.length)];
        return results.count > 0;
    }
    
    - (BOOL)isMoney {
        return [self match:@"^\\d*+(\\.\\d{0,2})?$"];
    }
    

    由于通过参数里面传来的字符串先拼接成最终的字符串,进行判断是否是 money 格式,所以也可以很好的避免,通过拷贝造成的不是字符串的问题.

    相关文章

      网友评论

        本文标题:textField如何限制金额输入

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