iOS各种号码验证的正则表达式

来源:互联网 发布:im即时通讯源码 购买 编辑:程序博客网 时间:2024/05/17 19:58

1.手机号判断,根据维基百科2016年6月修订的段号判断

  • 是否是手机号
/**手机号码 13[0-9],14[5|7|9],15[0-3],15[5-9],17[0|1|3|5|6|8],18[0-9]移动:134[0-8],13[5-9],147,15[0-2],15[7-9],178,18[2-4],18[7-8]联通:13[0-2],145,15[5-6],17[5-6],18[5-6]电信:133,1349,149,153,173,177,180,181,189虚拟运营商: 170[0-2]电信  170[3|5|6]移动 170[4|7|8|9],171 联通上网卡又称数据卡,14号段为上网卡专属号段,中国联通上网卡号段为145,中国移动上网卡号段为147,中国电信上网卡号段为149*/+(BOOL)isMobilePhone:(NSString *)phoneNum{    NSString * MOBIL = @"^1(3[0-9]|4[579]|5[0-35-9]|7[01356]|8[0-9])\\d{8}$";    NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBIL];    if ([regextestmobile evaluateWithObject:phoneNum]) {        return YES;    }    return NO;}
  • 是否是移动号
/** *  是否是移动号 * 中国移动:China Mobile * 134[0-8],13[5-9],147,15[0-2],15[7-9],170[3|5|6],178,18[2-4],18[7-8] */+(BOOL)isCMMobilePhone:(NSString *)phoneNum{    NSString * CM = @"^1(34[0-8]|70[356]|(3[5-9]|4[7]|5[0-27-9]|7[8]|8[2-47-8])\\d)\\d{7}$";    NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];    if ([regextestcm evaluateWithObject:phoneNum]) {        return YES;    }    return NO;}
  • 是否是联通号
/** *  是否是联通号 * 中国联通:China Unicom * 13[0-2],145,15[5-6],17[5-6],18[5-6],170[4|7|8|9],171 */+(BOOL)isCUMobilePhone:(NSString *)phoneNum{    NSString * CU = @"^1(70[07-9]|(3[0-2]|4[5]|5[5-6]|7[15-6]|8[5-6])\\d)\\d{7}$";    NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU];    if ([regextestcu evaluateWithObject:phoneNum]) {        return YES;    }    return NO;}
  • 是否是电信号
/** *  是否是电信号 * 中国电信:China Telecom * 133,1349,149,153,173,177,180,181,189,170[0-2] */+(BOOL)isCTMobilePhone:(NSString *)phoneNum{    NSString * CT = @"^1(34[9]|70[0-2]|(3[3]|4[9]|5[3]|7[37]|8[019])\\d)\\d{7}$";    NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT];    if ([regextestct evaluateWithObject:phoneNum]) {        return YES;    }    return NO;}

2. 18位身份证格式和合法性验证

+(BOOL)checkUserID:(NSString *)userID{    //长度不为18的都排除掉    if (userID.length!=18) {        return NO;    }        //校验格式    NSString *regex2 = @"^(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$)|(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[Xx])$)$";    NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];    BOOL flag = [identityCardPredicate evaluateWithObject:userID];        if (!flag) {        return flag;    //格式错误    }else {        //格式正确在判断是否合法                //将前17位加权因子保存在数组里        NSArray * idCardWiArray = @[@"7", @"9", @"10", @"5", @"8", @"4", @"2", @"1", @"6", @"3", @"7", @"9", @"10", @"5", @"8", @"4", @"2"];                //这是除以11后,可能产生的11位余数、验证码,也保存成数组        NSArray * idCardYArray = @[@"1", @"0", @"10", @"9", @"8", @"7", @"6", @"5", @"4", @"3", @"2"];                //用来保存前17位各自乖以加权因子后的总和        NSInteger idCardWiSum = 0;        for(int i = 0;i < 17;i++)        {            NSInteger subStrIndex = [[userID substringWithRange:NSMakeRange(i, 1)] integerValue];            NSInteger idCardWiIndex = [[idCardWiArray objectAtIndex:i] integerValue];                        idCardWiSum+= subStrIndex * idCardWiIndex;                    }                //计算出校验码所在数组的位置        NSInteger idCardMod=idCardWiSum%11;                //得到最后一位身份证号码        NSString * idCardLast= [userID substringWithRange:NSMakeRange(17, 1)];                //如果等于2,则说明校验码是10,身份证号码最后一位应该是X        if(idCardMod==2)        {            if([idCardLast isEqualToString:@"X"]||[idCardLast isEqualToString:@"x"])            {                return YES;            }else            {                return NO;            }        }else{            //用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码            if([idCardLast isEqualToString: [idCardYArray objectAtIndex:idCardMod]])            {                return YES;            }            else            {                return NO;            }        }    }}

3. 车牌号格式校验(粤A8888澳)

+(BOOL)checkCarID:(NSString *)carID;{    if (carID.length!=7) {        return NO;    }    NSString *carRegex = @"^[\u4e00-\u9fa5]{1}[a-hj-zA-HJ-Z]{1}[a-hj-zA-HJ-Z_0-9]{4}[a-hj-zA-HJ-Z_0-9_\u4e00-\u9fa5]$";    NSPredicate *carTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",carRegex];    return [carTest evaluateWithObject:carID];        return YES;}

4. 6~16位数字/字母/下划线组成的密码格式校验

#pragma mark    核对密码格式,6~16位数字/字母/下划线+(BOOL)checkPsw:(NSString *)pswStr{    NSString * pattern  =   @"^[A-Za-z0-9_]{6,16}$";//    NSString *condition =@"^(?![0-9]+$)(?![a-zA-Z]+$)[a-zA-Z0-9]{6,16}";    NSPredicate * pred  =   [NSPredicate predicateWithFormat:@"SELF MATCHES %@",pattern];    return [pred evaluateWithObject:pswStr];}

5. 判断字符串是否全为[(数字)OR(数字|字母)OR(字母)OR(汉字)]

+(BOOL)isAllNumber:(NSString *)string{    NSString *condition = @"^[0-9]*$";//是否都是数字//    NSString *condition = @"^[A-Za-z]+$";//是否都是字母//    NSString *condition = @"^[A-Za-z0-9]+$";//是否都是字母和数字{6,16}//    NSString *condition = @"^[A-Za-z0-9]{6,16}$";//是否都是字母和数字且长度在[6,16]//    NSString *condition = @"^[\u4e00-\u9fa5]{0,}$";//只能输入汉字    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES%@",condition];    return [predicate evaluateWithObject:string];}

6. 银行卡格式验证

//银行卡验证+(BOOL)isBankCard:(NSString *)bankCard{    if (bankCard.length < 16) {        return NO;    }    NSInteger oddsum = 0;     //奇数求和    NSInteger evensum = 0;    //偶数求和    NSInteger allsum = 0;    NSInteger cardNoLength = (NSInteger)[bankCard length];    // 取了最后一位数    NSInteger lastNum = [[bankCard substringFromIndex:cardNoLength-1] intValue];    //测试的是除了最后一位数外的其他数字    bankCard = [bankCard substringToIndex:cardNoLength - 1];    for (NSInteger i = cardNoLength -1 ; i>=1;i--) {        NSString *tmpString = [bankCard substringWithRange:NSMakeRange(i-1, 1)];        NSInteger tmpVal = [tmpString integerValue];        if (cardNoLength % 2 ==1 ) {//卡号位数为奇数            if((i % 2) == 0){//偶数位置                tmpVal *= 2;                if(tmpVal>=10)                    tmpVal -= 9;                evensum += tmpVal;            }else{//奇数位置                oddsum += tmpVal;            }        }else{            if((i % 2) == 1){                tmpVal *= 2;                if(tmpVal>=10)                    tmpVal -= 9;                evensum += tmpVal;            }else{                oddsum += tmpVal;            }        }    }        allsum = oddsum + evensum;    allsum += lastNum;    if((allsum % 10) == 0)        return YES;    else        return NO;}

7. 邮箱格式验证

//验证邮箱地址+(BOOL)isEmail:(NSString *)email{    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];    return [emailTest evaluateWithObject:email];}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 倾颓 倾颓的读音 倾颓的意思 偃蹇 偃术 偃者道途 偃旗息鼓 偃怎么读 偃武修文 偃组词 偃读音 偃旗卧鼓 偃的读音 偃革尚文 偃武崇文 风行草偃 偃旗息鼓读音 前合后偃 偃蹇困穷 偃苗助长 偃怎么读音 偃的拼音 与世偃仰 偃者道途sodu 偃拼音 草偃风行 偃旗仆鼓 偃兵息甲 化若偃草 偃者道途txt 偃旗息鼓的读音 时筑偃湖未成 一顾齐眉 偃舒 偃读音是什么 偃蹇怎么读 偃息旗鼓的意思 偃旗息鼓的偃是什么意思 偃旗息鼓是什么意思 偃师