疑难技术点汇总(一)---手机号正则匹配

前言

在项目开发中,验证用户输入的手机号格式是否正确,是一个非常常见的需求。
本人的资料检索水平有限,未找到比较权威的说明文档。因此只能动手,丰衣足食。
本着授人以鱼不如授人以渔的想法,现将该需求的实现细节罗列如下:

手机号号段信息汇总

中国电信号段:133、1349、1410、149、153、162、170(0-2)、173、174(0-1)、177、180、181、189、190、191、193、199
中国联通号段:130、131、132、140、145、146、155、156、166、167、170(4.7-9)、171、175、176、185、186、196
中国移动号段:134(0-8)、135、136、137、138、139、1440、147、148、150、151、152、157、158、159、165、170(3.5.6)、172、178、182、183、184、187、188、195、197、198
中国广电号段:192
其他号段(上网卡):
中国联通:145
中国移动:147
中国电信:149
虚拟运营商:
电信:1700、1701、1702、162
移动:1703、1705、1706、165
联通:1704、1707、1708、1709、171、167
卫星通信:1349、174
物联网:140、141、144、146、148

上文内容参考截取于百度百科—国内手机号段汇总说明

手机号号段归纳汇总

13开头

133、1349
130、131、132
134(0-8)、135、136、137、138、139
(0、1、2、3、4、5、6、7、8、9)
正则匹配表达式:[1][3][\d]{9}

14开头

1410、149
140、145、146
1440、147、148
145、147、149
140、141、144、146、148
(0、1、4、5、6、7、8、9)缺2和3
正则匹配表达式:[1][4][^23][\d]{8}

15开头

153
155、156
150、151、152、157、158、159
(0、1、2、3、5、6、7、8、9)缺4
正则匹配表达式:[1][5][^4][\d]{8}

16开头

162
166、167
165
162
165
167
(2、5、6、7)缺0、1、3、4、8、9
正则匹配表达式:[1][6][2567][\d]{8}

17开头

170(0-2)、173、174(0-1)、177
170(4.7-9)、171、175、176
170(3.5.6)、172、178
1700、1701、1702
1703、1705、1706
1704、1707、1708、1709、171
174
(0、1、2、3、4、5、6、7、8)缺9
正则匹配表达式:[1][7][^9][\d]{8}

18开头

180、181、189
185、186
182、183、184、187、188
(0、1、2、3、4、5、6、7、8、9)
正则匹配表达式:[1][8][\d]{9}

19开头

190、191、193、199
196
195、197、198
192
(0、1、2、3、5、6、7、8、9)缺4
正则匹配表达式:[1][9][^4][\d]{8}

手机号前3位,汇总所有正则匹配表达式如下:
[1][3][\d]
[1][4][^2,3]
[1][5][^4]
[1][6][2,5,6,7]
[1][7][^9]
[1][8][\d]
[1][9][^4]

在既保证程序的可读性,又保证程序的后续扩展性(如:195开头的手机号就是2019年8月左右添加!!!),则手机号的正则匹配表达式如下:

[1](([3][\d])|([4][^23])|([5][^4])|([6][2567])|([7][^9])|([8][\d])|([9][^4]))[\d]{8}

代码实现

public final class CommonUtils {
	
	private static final String MOBILE_EXP = "^[1](([3][\\d])|([4][^23])|([5][^4])|([6][2567])|([7][^9])|([8][\\d])|([9][^4]))[\\d]{8}$";

    public static boolean isMobile (String mobile) {
        if (mobile != null) {
            return Pattern.compile(MOBILE_EXP).matcher(mobile).matches();
        }
        return false;
    }
}

该工具方法的测试效果图如下:

工具方法测试效果图
上述工具方法的测试效果图显示:测试符合预期结果。即该方法能够验证输入字符串是否符合手机号定义规则。

后续说明

基于正则表达式[1](([3][\d])|([4][^23])|([5][^4])|([6][2567])|([7][^9])|([8][\d])|([9][^4]))[\d]{8},其他编程语言如JavaScript\Python\C#等对应的工具方法也可以很简单地实现,这里就不再赘述,有兴趣的可以自行实现。而且如果后续添加了新的手机号定义规则,也可以很简单地加以完善。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值