iOS中常见正则表达式验证方法
在某些App应用里面需要填写用户信息(用于验证),有身份证、手机号、军官证等等。下面来跟大家分享一下各自的验证方式。
1.验证手机号码,这个是对任意输入的一串数字做验证,返回一个识别结果(字符串),根据这个结果再做判断。
//判断手机号码
+(NSString*)valiMobile:(NSString*)mobile{
if(mobile.length!=11){
return@"手机号码格式错误";
}else{
/**
*移动号段正则表达式
*/
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=[NSPredicatepredicateWithFormat:@"SELFMATCHES%@",CM_NUM];
BOOLisMatch1=[pred1evaluateWithObject:mobile];
NSPredicate*pred2=[NSPredicatepredicateWithFormat:@"SELFMATCHES%@",CU_NUM];
BOOLisMatch2=[pred2evaluateWithObject:mobile];
NSPredicate*pred3=[NSPredicatepredicateWithFormat:@"SELFMATCHES%@",CT_NUM];
BOOLisMatch3=[pred3evaluateWithObject:mobile];
if(isMatch1||isMatch2||isMatch3){
returnnil;
}else{
return@"请输入正确的手机号码";
}
}
returnnil;
}
2.验证军官证
//验证军官证
-(BOOL)checkOfficerCard:(NSString*)officerCard{
//exp:政字第00111206号
BOOLflag;
if(officerCard.length<=0){
flag=NO;
returnflag;
}
NSString*regex2=@"^([\u5357|\u5317|\u6c88|\u5170|\u6210|\u6d4e|\u5e7f|\u6d77|\u7a7a|\u53c2|\u653f|\u540e|\u88c5][\u5b57][\u7b2c]\\d{8}[\u53f7])$";
NSPredicate*identityCardPredicate=[NSPredicatepredicateWithFormat:@"SELFMATCHES%@",regex2];
return[identityCardPredicateevaluateWithObject:officerCard];
}
3.验证身份证,这个是真实身份证的验证方法,具有唯一性。
//精确的身份证号码有效性检测
-(BOOL)accurateVerifyIDCardNumber:(NSString*)value{
value=[valuestringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceAndNewlineCharacterSet]];
intlength=0;
if(!value){
returnNO;
}else{
length=(int)value.length;
if(length!=15&&length!=18){
returnNO;
}
}
//省份代码
NSArray*areasArray=@[@"11",@"12",@"13",@"14",@"15",@"21",@"22",@"23",@"31",@"32",@"33",@"34",@"35",@"36",@"37",@"41",@"42",@"43",@"44",@"45",@"46",@"50",@"51",@"52",@"53",@"54",@"61",@"62",@"63",@"64",@"65",@"71",@"81",@"82",@"91"];
NSString*valueStart2=[valuesubstringToIndex:2];
BOOLareaFlag=NO;
for(NSString*areaCodeinareasArray){
if([areaCodeisEqualToString:valueStart2]){
areaFlag=YES;
break;
}
}
if(!areaFlag){
returnNO;
}
NSRegularExpression*regularExpression;
NSUIntegernumberofMatch;
intyear=0;
switch(length){
case15:
year=[valuesubstringWithRange:NSMakeRange(6,2)].intValue+1900;
if(year%4==0||(year%100==0&&year%4==0)){
regularExpression=[[NSRegularExpressionalloc]initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$"
options:NSRegularExpressionCaseInsensitive
error:nil];//测试出生日期的合法性
}else{
regularExpression=[[NSRegularExpressionalloc]initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$"
options:NSRegularExpressionCaseInsensitive
error:nil];//测试出生日期的合法性
}
numberofMatch=[regularExpressionnumberOfMatchesInString:value
options:NSMatchingReportProgress
range:NSMakeRange(0,value.length)];
if(numberofMatch>0){
returnYES;
}else{
returnNO;
}
case18:
year=[valuesubstringWithRange:NSMakeRange(6,4)].intValue;
if(year%4==0||(year%100==0&&year%4==0)){
regularExpression=[[NSRegularExpressionalloc]initWithPattern:@"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$"
options:NSRegularExpressionCaseInsensitive
error:nil];//测试出生日期的合法性
}else{
regularExpression=[[NSRegularExpressionalloc]initWithPattern:@"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$"
options:NSRegularExpressionCaseInsensitive
error:nil];//测试出生日期的合法性
}
numberofMatch=[regularExpressionnumberOfMatchesInString:value
options:NSMatchingReportProgress
range:NSMakeRange(0,value.length)];
if(numberofMatch>0){
intS=([valuesubstringWithRange:NSMakeRange(0,1)].intValue+[valuesubstringWithRange:NSMakeRange(10,1)].intValue)*7+([valuesubstringWithRange:NSMakeRange(1,1)].intValue+[valuesubstringWithRange:NSMakeRange(11,1)].intValue)*9+([valuesubstringWithRange:NSMakeRange(2,1)].intValue+[valuesubstringWithRange:NSMakeRange(12,1)].intValue)*10+([valuesubstringWithRange:NSMakeRange(3,1)].intValue+[valuesubstringWithRange:NSMakeRange(13,1)].intValue)*5+([valuesubstringWithRange:NSMakeRange(4,1)].intValue+[valuesubstringWithRange:NSMakeRange(14,1)].intValue)*8+([valuesubstringWithRange:NSMakeRange(5,1)].intValue+[valuesubstringWithRange:NSMakeRange(15,1)].intValue)*4+([valuesubstringWithRange:NSMakeRange(6,1)].intValue+[valuesubstringWithRange:NSMakeRange(16,1)].intValue)*2+[valuesubstringWithRange:NSMakeRange(7,1)].intValue*1+[valuesubstringWithRange:NSMakeRange(8,1)].intValue*6+[valuesubstringWithRange:NSMakeRange(9,1)].intValue*3;
intY=S%11;
NSString*M=@"F";
NSString*JYM=@"10X98765432";
M=[JYMsubstringWithRange:NSMakeRange(Y,1)];//判断校验位
if([MisEqualToString:[valuesubstringWithRange:NSMakeRange(17,1)]]){
returnYES;//检测ID的校验位
}else{
returnNO;
}
}else{
returnNO;
}
default:
returnNO;
}
}
4.邮箱的验证
//邮箱验证
-(BOOL)isEmailAddress{
NSString*emailRegex=@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate*predicate=[NSPredicatepredicateWithFormat:@"selfmatches%@",emailRegex];
return[predicateevaluateWithObject:self];
}
5.银行卡有效性验证。这里是给NSString写的分类
/**银行卡号有效性问题Luhn算法
*现行16位银联卡现行卡号开头6位是622126~622925之间的,7到15位是银行自定义的,
*可能是发卡分行,发卡网点,发卡序号,第16位是校验码。
*16位卡号校验位采用Luhm校验方法计算:
*1,将未带校验位的15位卡号从右依次编号1到15,位于奇数位号上的数字乘以2
*2,将奇位乘积的个十位全部相加,再加上所有偶数位上的数字
*3,将加法和加上校验位能被10整除。
*/
-(BOOL)bankCardCheck{
NSString*lastNum=[[selfsubstringFromIndex:(self.length-1)]copy];//取出最后一位
NSString*forwardNum=[[selfsubstringToIndex:(self.length-1)]copy];//前15或18位
NSMutableArray*forwardArr=[[NSMutableArrayalloc]initWithCapacity:0];
for(inti=0;i-1;i--){//前15位或者前18位倒序存进数组
[forwardDescArraddObject:forwardArr[i]];
}
NSMutableArray*arrOddNum=[[NSMutableArrayalloc]initWithCapacity:0];//奇数位*2的积<9
NSMutableArray*arrOddNum2=[[NSMutableArrayalloc]initWithCapacity:0];//奇数位*2的积>9
NSMutableArray*arrEvenNum=[[NSMutableArrayalloc]initWithCapacity:0];//偶数位数组
for(inti=0;i
以上简单的收录了在iOS开发中常见的正则表达式的验证方法,如果写的有问题,还请大家及时指正。