美文网首页
oc输入8-16位数字和字符

oc输入8-16位数字和字符

作者: 虫yu | 来源:发表于2020-04-10 11:46 被阅读0次
    #define kAlphaNum @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
    
    // 判断长度大于8位后再接着判断是否同时包含数字和字符
    + (BOOL)hasNumAndLetter:(NSString *)string {
        
        BOOL result = false;
        if ([string length] >= 8 && [string length] <= 16){
            // 判断长度大于8位后再接着判断是否同时包含数字和字符
            NSString * regex = @"^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$";
            NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
            result = [pred evaluateWithObject:string];
        }
        return result;
    }
    
    // 判断是否可以输入
    + (BOOL)canInputText:(NSString *)text string:(NSString *)string {
        NSCharacterSet *cs;
        cs = [[NSCharacterSet characterSetWithCharactersInString:kAlphaNum] invertedSet];
        NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; //按cs分离出数组,数组按@""分离出字符串
        BOOL canChange = [string isEqualToString:filtered];
        if(text.length <= 16) {
            return canChange;
        }
        return  NO;
    }
    

    使用:

    1.限制只能输入数字和字符

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
      // 限制只能输入数字和字符
        if ([self.passworld isEqual:textField]) {
             return  [NSString canInputText:textField.text string:string];
        }
       return  YES;
    }
    
    

    2.必须输入数字+字母

        if (self.passworld.text.length<8 ||self.passworld.text.length >16) {
            [SVProgressHUD showErrorWithStatus:@"密码长度限制为8-16位"];
            return;
        }
        
        if (![NSString hasNumAndLetter:self.passworld.text]) {
            [SVProgressHUD showErrorWithStatus:@"请输入8-16位数字+字母组合"];
            return;
        }
    

    相关文章

      网友评论

          本文标题:oc输入8-16位数字和字符

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