代码之家  ›  专栏  ›  技术社区  ›  Adeel Ilyas

UitextField限制,无特殊字符IOS目标C

  •  0
  • Adeel Ilyas  · 技术社区  · 6 年前

    我有一个 UITextField 其中不允许使用特殊字符,最多20个字符。

    我使用以下代码来限制文本字段

    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > limitPassportNumber) ? NO : YES;
    

    对于停止特殊字符条目,我有以下代码。

    NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet];
            NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
            return [string isEqualToString:filtered];
    

    现在,如果我需要两者都返回,那么只有一个会被执行。

    有人能提出建议吗?谢谢

    3 回复  |  直到 6 年前
        1
  •  1
  •   rmaddy    6 年前

    NO

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
        NSUInteger newLength = textField.text.length + string.length - range.length;
        if (newLength > limitPassportNumber) {
            return NO; // too long
        }
    
        NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet];
        NSRange badRange = [string rangeOfCharacterFromSet:cs];
    
        return badRange.location == NSNotFound;
    }
    
        2
  •  0
  •   Yagnesh Dobariya    6 年前
    -(BOOL)isValidString:(NSString *)string{
        NSString *regex = @"[A-Z0-9a-z]*";
        NSPredicate *regTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
        if ([regTest evaluateWithObject:string]) {
            return YES;
        }
        return NO;
    }
    
    -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
        if ([string length] == 0)
            return YES;
        if ([string length] > 0 && [string length] <=20) {
            NSString *newString = [textField text];
            newString = [newString stringByReplacingCharactersInRange:range withString:string];
    
            return [self isValidString:newString];
        } else {
            return NO;
        }
    }
    
        3
  •  -1
  •   TheTravloper    6 年前
    NSString *str = @"[~!@#$%^&*()_+-]";
    
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", str];
    
    if([[str evaluateWithObject:textfield.text]== YES] && [textfield.text length]<20){
    
      // Do Something
    }
    else{
    
      //Textfield has a special character or the text is greater than 20
    }