请先查看正则相关:
http://www.jianshu.com/p/91f4d9f8c8f3
正则验证手机号的有效性:
NSString *mobileRegex = @"^(0|86|17951)?(13[0-9]|15[012356789]|17[0678]|18[0-9]|14[57])[0-9]{8}$";
NSPredicate *pre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",mobileRegex];
[pre evaluateWithObject:@"你输入的手机号码"];//此处返回的是BOOL类型,YES or NO;
区分运营商号段的手机号有效性判断
#pragma mark - 判断是否为电话号码
- (BOOL)isPhoneNumber
{
/**
* 移动号段正则表达式
*/
NSString *CM_NUM = @"^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\\d{8}|(1705)\\d{7}$";
/**
* 联通号段正则表达式
*/
NSString *CU_NUM = @"^((13[0-2])|(145)|(15[5-6])|(176)|(18[5,6]))\\d{8}|(1709)\\d{7}$";
/**
* 电信号段正则表达式
*/
NSString *CT_NUM = @"^((133)|(153)|(177)|(18[0,1,9]))\\d{8}$";
NSPredicate *pred1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM_NUM];
BOOL isMatch1 = [pred1 evaluateWithObject:self];
NSPredicate *pred2 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU_NUM];
BOOL isMatch2 = [pred2 evaluateWithObject:self];
NSPredicate *pred3 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT_NUM];
BOOL isMatch3 = [pred3 evaluateWithObject:self];
if (isMatch1 || isMatch2 || isMatch3) {
return YES;
}else{
return NO;
}
}
手机号段汇总:
移动
139、138、137、136、135、134、159、158、157、150、151、152、
147(数据卡)、188、187、182、183、184、178
联通
130、131、132、156、155、186、185、145(数据卡)、176
电信
133、153、189、180、181、177、173(待放)
前3位是网络识别号 , 4-7位是地区编码 , 8-11位是用户号码
“正确”的读法:1XX-XXXX-XXXX,遇到三位 ,三位的读号码的,真的别扭
验证邮箱的有效性:
NSString *emailRegex = @"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *pre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",emailRegex];
[pre evaluateWithObject:@"你输入的邮箱"];//此处返回的是BOOL类型,YES or NO;
验证身份证号码的有效性:
NSString *regex2 = @"^(\\d{14}|\\d{17})(\\d|[xX])$";
NSPredicate *pre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];
[pre evaluateWithObject:@"你输入的身份证号码"];//此处返回的是BOOL类型,YES or NO;