iOS正则表达式验证手机号、邮箱、身份证号等
本文实例为大家分享了常用的iOS正则表达式,供大家参考,具体内容如下
#import"NSString+RegexCategory.h" @implementationNSString(RegexCategory) #pragmamark-正则相关 -(BOOL)isValidateByRegex:(NSString*)regex{ NSPredicate*pre=[NSPredicatepredicateWithFormat:@"SELFMATCHES%@",regex]; return[preevaluateWithObject:self]; } #pragmamark- //手机号分服务商 -(BOOL)isMobileNumberClassification{ /** *手机号码 *移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188,1705 *联通:130,131,132,152,155,156,185,186,1709 *电信:133,1349,153,180,189,1700 */ //NSString*MOBILE=@"^1((3//d|5[0-35-9]|8[025-9])//d|70[059])\\d{7}$";//总况 /** 10*中国移动:ChinaMobile 11*134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188,1705 12*/ NSString*CM=@"^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d|705)\\d{7}$"; /** 15*中国联通:ChinaUnicom 16*130,131,132,152,155,156,185,186,1709 17*/ NSString*CU=@"^1((3[0-2]|5[256]|8[56])\\d|709)\\d{7}$"; /** 20*中国电信:ChinaTelecom 21*133,1349,153,180,189,1700 22*/ NSString*CT=@"^1((33|53|8[09])\\d|349|700)\\d{7}$"; /** 25*大陆地区固话及小灵通 26*区号:010,020,021,022,023,024,025,027,028,029 27*号码:七位或八位 28*/ NSString*PHS=@"^0(10|2[0-5789]|\\d{3})\\d{7,8}$"; //NSPredicate*regextestmobile=[NSPredicatepredicateWithFormat:@"SELFMATCHES%@",MOBILE]; if(([selfisValidateByRegex:CM]) ||([selfisValidateByRegex:CU]) ||([selfisValidateByRegex:CT]) ||([selfisValidateByRegex:PHS])) { returnYES; } else { returnNO; } } //手机号有效性 -(BOOL)isMobileNumber{ /** *手机号以13、15、18、170开头,8个\d数字字符 *小灵通区号:010,020,021,022,023,024,025,027,028,029还有未设置的新区号xxx */ NSString*mobileNoRegex=@"^1((3\\d|5[0-35-9]|8[025-9])\\d|70[059])\\d{7}$";//除4以外的所有个位整数,不能使用[^4,\\d]匹配,这里是否iOSBug? NSString*phsRegex=@"^0(10|2[0-57-9]|\\d{3})\\d{7,8}$"; BOOLret=[selfisValidateByRegex:mobileNoRegex]; BOOLret1=[selfisValidateByRegex:phsRegex]; return(ret||ret1); } //邮箱 -(BOOL)isEmailAddress{ NSString*emailRegex=@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; return[selfisValidateByRegex:emailRegex]; } //身份证号 -(BOOL)simpleVerifyIdentityCardNum { NSString*regex2=@"^(\\d{14}|\\d{17})(\\d|[xX])$"; return[selfisValidateByRegex:regex2]; } //车牌 -(BOOL)isCarNumber{ //车牌号:湘K-DE829香港车牌号码:粤Z-J499港 NSString*carRegex=@"^[\u4e00-\u9fff]{1}[a-zA-Z]{1}[-][a-zA-Z_0-9]{4}[a-zA-Z_0-9_\u4e00-\u9fff]$";//其中\u4e00-\u9fa5表示unicode编码中汉字已编码部分,\u9fa5-\u9fff是保留部分,将来可能会添加 return[selfisValidateByRegex:carRegex]; } -(BOOL)isMacAddress{ NSString*macAddRegex=@"([A-Fa-f\\d]{2}:){5}[A-Fa-f\\d]{2}"; return[selfisValidateByRegex:macAddRegex]; } -(BOOL)isValidUrl { NSString*regex=@"^((http)|(https))+:[^\\s]+\\.[^\\s]*$"; return[selfisValidateByRegex:regex]; } -(BOOL)isValidChinese; { NSString*chineseRegex=@"^[\u4e00-\u9fa5]+$"; return[selfisValidateByRegex:chineseRegex]; } -(BOOL)isValidPostalcode{ NSString*postalRegex=@"^[0-8]\\d{5}(?!\\d)$"; return[selfisValidateByRegex:postalRegex]; } -(BOOL)isValidTaxNo { NSString*taxNoRegex=@"[0-9]\\d{13}([0-9]|X)$"; return[selfisValidateByRegex:taxNoRegex]; } -(BOOL)isValidWithMinLenth:(NSInteger)minLenth maxLenth:(NSInteger)maxLenth containChinese:(BOOL)containChinese firstCannotBeDigtal:(BOOL)firstCannotBeDigtal; { //[\u4e00-\u9fa5A-Za-z0-9_]{4,20} NSString*hanzi=containChinese?@"\u4e00-\u9fa5":@""; NSString*first=firstCannotBeDigtal?@"^[a-zA-Z_]":@""; NSString*regex=[NSStringstringWithFormat:@"%@[%@A-Za-z0-9_]{%d,%d}",first,hanzi,(int)(minLenth-1),(int)(maxLenth-1)]; return[selfisValidateByRegex:regex]; } -(BOOL)isValidWithMinLenth:(NSInteger)minLenth maxLenth:(NSInteger)maxLenth containChinese:(BOOL)containChinese containDigtal:(BOOL)containDigtal containLetter:(BOOL)containLetter containOtherCharacter:(NSString*)containOtherCharacter firstCannotBeDigtal:(BOOL)firstCannotBeDigtal; { NSString*hanzi=containChinese?@"\u4e00-\u9fa5":@""; NSString*first=firstCannotBeDigtal?@"^[a-zA-Z_]":@""; NSString*lengthRegex=[NSStringstringWithFormat:@"(?=^.{%@,%@}$)",@(minLenth),@(maxLenth)]; NSString*digtalRegex=containDigtal?@"(?=(.*\\d.*){1})":@""; NSString*letterRegex=containLetter?@"(?=(.*[a-zA-Z].*){1})":@""; NSString*characterRegex=[NSStringstringWithFormat:@"(?:%@[%@A-Za-z0-9%@]+)",first,hanzi,containOtherCharacter?containOtherCharacter:@""]; NSString*regex=[NSStringstringWithFormat:@"%@%@%@%@",lengthRegex,digtalRegex,letterRegex,characterRegex]; return[selfisValidateByRegex:regex]; } #pragmamark-算法相关 //精确的身份证号码有效性检测 +(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){ returnfalse; } 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; } } /**银行卡号有效性问题Luhn算法 *现行16位银联卡现行卡号开头6位是622126~622925之间的,7到15位是银行自定义的, *可能是发卡分行,发卡网点,发卡序号,第16位是校验码。 *16位卡号校验位采用Luhm校验方法计算: *1,将未带校验位的15位卡号从右依次编号1到15,位于奇数位号上的数字乘以2 *2,将奇位乘积的个十位全部相加,再加上所有偶数位上的数字 *3,将加法和加上校验位能被10整除。 */ -(BOOL)bankCardluhmCheck{ 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<forwardNum.length;i++){ NSString*subStr=[forwardNumsubstringWithRange:NSMakeRange(i,1)]; [forwardArraddObject:subStr]; } NSMutableArray*forwardDescArr=[[NSMutableArrayalloc]initWithCapacity:0]; for(inti=(int)(forwardArr.count-1);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<forwardDescArr.count;i++){ NSIntegernum=[forwardDescArr[i]intValue]; if(i%2){//偶数位 [arrEvenNumaddObject:[NSNumbernumberWithInteger:num]]; }else{//奇数位 if(num*2<9){ [arrOddNumaddObject:[NSNumbernumberWithInteger:num*2]]; }else{ NSIntegerdecadeNum=(num*2)/10; NSIntegerunitNum=(num*2)%10; [arrOddNum2addObject:[NSNumbernumberWithInteger:unitNum]]; [arrOddNum2addObject:[NSNumbernumberWithInteger:decadeNum]]; } } } __blockNSIntegersumOddNumTotal=0; [arrOddNumenumerateObjectsUsingBlock:^(NSNumber*obj,NSUIntegeridx,BOOL*stop){ sumOddNumTotal+=[objintegerValue]; }]; __blockNSIntegersumOddNum2Total=0; [arrOddNum2enumerateObjectsUsingBlock:^(NSNumber*obj,NSUIntegeridx,BOOL*stop){ sumOddNum2Total+=[objintegerValue]; }]; __blockNSIntegersumEvenNumTotal=0; [arrEvenNumenumerateObjectsUsingBlock:^(NSNumber*obj,NSUIntegeridx,BOOL*stop){ sumEvenNumTotal+=[objintegerValue]; }]; NSIntegerlastNumber=[lastNumintegerValue]; NSIntegerluhmTotal=lastNumber+sumEvenNumTotal+sumOddNum2Total+sumOddNumTotal; return(luhmTotal%10==0)?YES:NO; } -(BOOL)isIPAddress{ NSString*regex=[NSStringstringWithFormat:@"^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$"]; NSPredicate*pre=[NSPredicatepredicateWithFormat:@"SELFMATCHES%@",regex]; BOOLrc=[preevaluateWithObject:self]; if(rc){ NSArray*componds=[selfcomponentsSeparatedByString:@","]; BOOLv=YES; for(NSString*sincomponds){ if(s.integerValue>255){ v=NO; break; } } returnv; } returnNO; } @end
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。