NSString格式校验
在项目开发过程中,NSString类型的变量是经常用到的,而且我们常常会对其格式进行对应的各种校验,你比如,在登录注册的时候,需要验证用户名的长度,用户名的字符组成等等,其实现在也有很多第三方提供的NSString的Category老方便我们做各种判断。由于最近做的一个项目需要判断密码的格式。主要在以下几个方面。
1.判断密码的强度:在一些项目中,不允许密码中出现“123456”,“123”,“abcde”等这种比较简单而且有规律的密码。
/**
* 判断密码的强度
*
* @param password 密码字符串
*
* @return如果密码比较强则返回YES,如果密码较弱返回是NO
*/
- (BOOL)judgePassWordStrengthWithPassWord:(NSString*)password{
NSArray *array = @[@"000000",@"111111",@"11111111",@"112233",@"123123",@"123321",@"123456",@"12345678",@"654321",@"666666",@"888888",@"abcdef",@"abcabc",@"abc123",@"a1b2c3",@"aaa111",@"123qwe",@"qwerty",@"qweasd",@"admin",@"password",@"p@ssword",@"passwd",@"iloveyou",@"5201314",@"password",@"123456",@"12345678",@"qwerty",@"abc123",@"monkey",@"1234567",@"letmein",@"trustno1",@"dragon",@"baseball",@"111111",@"iloveyou",@"master",@"sunshine",@"ashley",@"bailey",@"passw0rd",@"shadow",@"123123",@"654321",@"superman",@"qazwsx",@"michael",@"football"];
NSRange range;
BOOL result = YES;
int count = array.count;
for (int i = 0; i < count; i++) {
range = [password rangeOfString:array[i]];
if(range.location != NSNotFound){
result = NO;
}
}
return result;
}
可以看到,对于一些不允许出现的密码,组合成一个数组,然后针对每一个数组中的元素来和密码进行比对,看密码是否和其相同,或者包含。
2.判断密码中是否有汉字,对于一些字符串由于编码的原因,不允许出现汉字。
/**
* 判断密码是否包含汉字
*
* @param inputString 字符串
*
* @return如果包含汉字,则返回YES,如果不包含汉字,则返回NO
*/
-(BOOL)isHasChinese:(NSString *)inputString{
for(int i=0; i< [inputString length];i++){
int a = [inputString characterAtIndex:i];
if( a > 0x4e00 && a < 0x9fff)
return YES;
}
returnNO;
}
判断字符串中是否包含汉字,只能通过拆解字符串中的汉字,然后针对每个字符的ascall码来判断。
3.判断字符串为手机号码
-(BOOL)isNumText:(NSString *)aNumString
{
NSString *regex = @"^((13[0-9])|(147)|(15[^4,\\D])|(18[0-9]))\\d{8}$";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
BOOL isPhoneNumRight;
isPhoneNumRight = [predicate evaluateWithObject:aNumString];
if(isPhoneNumRight)
{
return NO;
}else
{
return YES;
}
}