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开发中常见的正则表达式的验证方法,如果写的有问题,还请大家及时指正。