一开始写了个正则表达式,如下,发现并没有满足条件,下面这个是只能包含字母和数字
+(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
本文介绍了两种不同的方法来验证密码的有效性,一种是利用正则表达式进行匹配,另一种则是通过查找至少一个数字和一个字母来实现。此外,还分享了一些实用的工具方法类,如验证手机号和中文字符等。
&spm=1001.2101.3001.5002&articleId=77183760&d=1&t=3&u=429945f792d44988a65399b30f54d2ec)
7865

被折叠的 条评论
为什么被折叠?



