一开始写了个正则表达式,如下,发现并没有满足条件,下面这个是只能包含字母和数字
+(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;
}
除此之外,个人还将开发中常用到的一些工具方法类进行了总结,诸如判断大陆手机号,判断中文字符等;大家有需要可以放在项目中使用,并再集成自己常用到的一些方法。
代码地址:ELPDevNormalTools