首页 > 开发 > JAVA > 正文

最新手机号码正则表达式

2016-07-25 21:42:55  来源:慕课网
  最近项目需要本地检测手机号码正确性,于是用了一段代码,但是后来发现这个代码块已经过时了。在网上简单找了下,发现没有最新的一个公开代码,可能很多人都是用的下面正则方法来检测手机号码,那你们该更新代码了。众所周知,三大运营商已经增加了不少手机号码字段,还用之前的代码就会流失部分用户了。(只讨论国内坏境)
  于是我在网上查了些数据,在之前的代码基础上改了下,方便适用于现在的环境。
  所用方法依然还是正则表达式,正则表达式主要就是用一个公式来匹配字符串是否具备某类规则。我们这里的思路和之前也是一样,只是对之前方法的一个补充与解析。新的方法只匹配了手机号码字段前三位,有些朋友可能还不太懂这个方法,为了方便大家使用,在最后会为大家简单拆分该方法,相信大家很快就会灵活应用了。
  文/ROB_YONG(简书作者)
原文链接:http://www.jianshu.com/p/e8477fdccbe9
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
/**
手机号码移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188联通:130,131,132,152,155,156,185,186  电信:133,1349,153,180,189
/
NSString MOBILE = @"^1(3[0-9]5[0-35-9]8[025-9])\d{8}$";
/
10 中国移动:China Mobile
11 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
12 /
NSString CM = @"^1(340-8\d)\d{7}$";
/

15 中国联通:China Unicom
16 130,131,132,152,155,156,185,186
17 /
NSString CU = @"^1(3[0-2]5[256]8[56])\d{8}$";
/
20 中国电信:China Telecom
21 133,1349,153,180,189
22 /
NSString CT = @"^1((33538[09])[0-9]349)\d{7}$";
/

25 大陆地区固话及小灵通
26 区号:010,020,021,022,023,024,025,027,028,029
27 号码:七位或八位
28 /
// NSString * PHS = @"^0(102[0-5789]\d{3})\d{7,8}$";
  NSPredicate regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
NSPredicate regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];
NSPredicate regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU];
NSPredicate regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT];
  if (([regextestmobile evaluateWithObject:mobileNum] == YES)
([regextestcm evaluateWithObject:mobileNum] == YES)
([regextestct evaluateWithObject:mobileNum] == YES)
([regextestcu evaluateWithObject:mobileNum] == YES))
{
return YES;
}
else
{
return NO;
}
}
(BOOL)isMobileNumber:(NSString *)mobileNum
{
if (mobileNum.length != 11)
{
return NO;
}
/**
手机号码: 13[0-9], 14[5,7], 15[0, 1, 2, 3, 5, 6, 7, 8, 9], 17[6, 7, 8], 18[0-9], 170[0-9]移动号段: 134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705联通号段: 130,131,132,155,156,185,186,145,176,1709电信号段: 133,153,180,181,189,177,1700
/
NSString MOBILE = @"^1(3[0-9]4[57]5[0-35-9]8[0-9]70)\d{8}$";
/**中国移动:China Mobile134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705
/
NSString CM = @"(^1(3[4-9]4[7]5[0-27-9]7[8]8[2-478])\d{8}$)(^1705\d{7}$)";
/**中国联通:China Unicom130,131,132,155,156,185,186,145,176,1709
/
NSString CU = @"(^1(3[0-2]4[5]5[56]7[6]8[56])\d{8}$)(^1709\d{7}$)";
/**中国电信:China Telecom  133,153,180,181,189,177,1700
/
NSString CT = @"(^1(3353778[019])\d{8}$)(^1700\d{7}$)";
  NSPredicate regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
NSPredicate regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];
NSPredicate regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU];
NSPredicate regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT];
  if (([regextestmobile evaluateWithObject:mobileNum] == YES)
([regextestcm evaluateWithObject:mobileNum] == YES)
([regextestct evaluateWithObject:mobileNum] == YES)
([regextestcu evaluateWithObject:mobileNum] == YES))
{
return YES;
}
else
{
return NO;
}
}
NSString MOBILE = @"^1(3[0-9]4[57]5[0-35-9]8[0-9]70)\d{8}$";
NSPredicate regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
return [regextestmobile evaluateWithObject:mobileNum];
(BOOL)isChinaMobile:(NSString )phoneNum
{
NSString CM = @"(^1(3[4-9]4[7]5[0-27-9]7[8]8[2-478])\d{8}$)(^1705\d{7}$)";
NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];
return [regextestcm evaluateWithObject:phoneNum];
}
(NSString )getPhoneNumType:(NSString )phoneNum
{
return [self isChinaMobile:phoneNum]? @"中国移动": ([self isChinaUnicom:phoneNum]? @"中国联通":([self isChinaTelecom:phoneNum]? @"中国电信": @"未知"));
}