您的位置:首页 > 移动开发 > IOS开发

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

2017-08-15 10:16 5749 查看
一开始写了个正则表达式,如下,发现并没有满足条件,下面这个是只能包含字母和数字

+(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 pred
4000
icateWithFormat:@"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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐