iOS 设置密码8-16位,必须包含字母和数字(可包含其他特殊字符)

来源:互联网 发布:java执行bat文件 编辑:程序博客网 时间:2024/06/05 08:58

一开始写了个正则表达式,如下,发现并没有满足条件,下面这个是只能包含字母和数字

+(BOOL)judgePassWordLegal:(NSString *)pass{  BOOL result = false;  if ([pass length] >= 8 && [pass 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:pass];  }  return result; }

通过想了下,其实只需要判断,这个字符串里面,至少包含一个数字和至少一个字母,其他可以包含 + - _,可以用如下表达式来判断
-(BOOL)isValidPasswordString{    BOOL result = NO;    if ([self length] >= 8 && [self length] <= 16){        //数字条件        NSRegularExpression *tNumRegularExpression = [NSRegularExpression regularExpressionWithPattern:@"[0-9]" options:NSRegularExpressionCaseInsensitive error:nil];                //符合数字条件的有几个        NSUInteger tNumMatchCount = [tNumRegularExpression numberOfMatchesInString:self                                                                           options:NSMatchingReportProgress                                                                             range:NSMakeRange(0, self.length)];                //英文字条件        NSRegularExpression *tLetterRegularExpression = [NSRegularExpression regularExpressionWithPattern:@"[A-Za-z]" options:NSRegularExpressionCaseInsensitive error:nil];                //符合英文字条件的有几个        NSUInteger tLetterMatchCount = [tLetterRegularExpression numberOfMatchesInString:self                                                                                 options:NSMatchingReportProgress                                                                                   range:NSMakeRange(0, self.length)];                if(tNumMatchCount >= 1 && tLetterMatchCount >= 1){            result = YES;        }    }    return result;}


阅读全文
0 0
原创粉丝点击