葵花宝典

UITextField输入限制汇总

2017-01-16  本文已影响48人  lym不解释

iOS常用正则表达式

  1. textField输入金额、数字、整数、小数 输入判断
#pragma mark - UITextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    
    NSString *toString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    
    if (toString.length) {
        NSString *stringRegex;
        if (textField == self.teamPriceTF || textField == self.masterPriceTF) {
            // 0~99999
            stringRegex = @"(\\+)?(([0]|(0[.]\\d{0,2}))|([1-9]\\d{0,4}(([.]\\d{0,2})?)))?";
        }
        else if (textField == self.prepayPriceTF) {
            // 1~9.9
            stringRegex = @"([1-9]{1}(([.]\\d{0,1})?))?"
        }
        else if (textField == self.personCountTF) {
            // 2~10
            stringRegex = @"[2-9]|10?";
        }
        else if (textField == self.timersTF) {
            // 1~999
            stringRegex = @"[1-9]\\d{0,2}?";
        }
        else if (textField == self.personCountTF) {
            // 2~10
            stringRegex = @"[2-9]|10?";
        }
        else if (textField == self.timersTF) {
            // 1~999
            stringRegex = @"[1-9]\\d{0,2}?";
        }
        NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", stringRegex];
        BOOL flag = [phoneTest evaluateWithObject:toString];
        return flag;
    }
    return YES;
}

2.textField输入个数限制遇上输入法的问题

2.1解决办法

//最多输入120个字
#pragma mark - UITextViewDelegate
- (void)textViewDidChange:(UITextView *)textView{
    int kMaxLength = 120;
    NSString *toBeString = textView.text;
    //if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
    UITextRange *selectedRange = [textView markedTextRange];
    //获取高亮部分
    UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
    // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
    if (!position) {
        if (toBeString.length >= kMaxLength) {
            textView.text = [toBeString substringToIndex:kMaxLength];
            _countLabel.text = [NSString stringWithFormat:@"%d/120", (int)textView.text.length];
            [self.view endEditing:YES];
        }else{
            _countLabel.text = [NSString stringWithFormat:@"%d/120", (int)textView.text.length];
        }
    }
    
}

2.2.给textField添加一个方法

[_textField addTarget:self action:@selector(editChange:) forControlEvents:UIControlEventEditingChanged];

//最多输入6个字
#define kMaxLength 6
 - (void)editChange:(UITextField*)textfield {
       NSString *toBeString = textfield.text;
       NSString *lang = [[UIApplication sharedApplication]textInputMode].primaryLanguage; // 键盘输入模
       if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
             UITextRange *selectedRange = [textfield markedTextRange];
            //获取高亮部分
             UITextPosition *position = [textfield positionFromPosition:selectedRange.start offset:0];
            // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
            if (!position) {
                   if (toBeString.length > kMaxLength)  {
                    NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:kMaxLength];
                    if (rangeIndex.length == 1)  {
                        textfield.text = [toBeString substringToIndex:kMaxLength];
                    }
                    else {
                        NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, kMaxLength)];
                        textfield.text = [toBeString substringWithRange:rangeRange];
                    }
                }
            }
        }
        else{ // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
               if (toBeString.length > kMaxLength)  {
                    NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:kMaxLength];
                    if (rangeIndex.length == 1) {
                        textfield.text = [toBeString substringToIndex:kMaxLength];
                    }
                    else  {
                        NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0,kMaxLength)];
                        textfield.text = [toBeString substringWithRange:rangeRange];
                    }
                }
}

3.去掉首尾空格

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
    // 将字符串首尾空格去掉
    textField.text = [textField.text  stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    return YES;
}
上一篇下一篇

猜你喜欢

热点阅读