前言

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

手机号号段信息汇总

中国电信号段: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. Vue手机号正则匹配,姓名加密展示

    一丶手机号 (1)正则匹配 if (!/^1[3|4|5|6|7|8|9]\d{9}$/.test(13807999985)) {console.log(resultPhone);//138****9 ...

  2. MySQL 2019最全的国家地区代码、手机号正则验证,覆盖191个国家和地区

    功能亮点: 最新的手机号正则表达式,基于2018年12月份制作: 最全的手机号正则匹配和验证,涵盖191个国家和地区: 在多个大项目中实践,完美无压力,适应更多应用场景: 注意事项 关于JQ中ajax ...

  3. 最新JS正则匹配大全(工具类:不断更新)

    一.回顾知识: . 点字符匹配除回车(\r).换行(\n).行分隔符(\u2028)和分段符(\u2029)之外的所有字符 注:码点大于0xFFFF的Unicode字符不能被匹配,因为会被认为是两个字 ...

  4. 正则匹配之正则匹配全部汇总:

    正则匹配全部汇总: 1.匹配中文:[\u4e00-\u9fa5] 2.英文字母:[a-zA-Z] 3.数字:[0-9] 4.匹配中文,英文字母和数字及下划线:^[\u4e00-\u9fa5_a-zA- ...

  5. iOS正则匹配手机号

    #pragma 正则匹配手机号 + (BOOL)validateMobile:(NSString *)mobileNum {     /**      * 手机号码      * 移动:134[0-8 ...

  6. mysql 替换非中文_mysql中的正则操作 匹配手机号,匹配中文,替换

    mysql中的正则操作 匹配手机号,匹配中文,替换 正则匹配hy_user表内tel字段的电话号码: SELECT * FROM hy_user WHERE tel REGEXP "[1][ ...

  7. js正则匹配手机号、身份证号

    正则匹配身份证号     <input v-if="!ableInput" type="number" v-model="phone" ...

  8. mysql中的正则操作 匹配手机号,匹配中文,替换

    mysql中的正则操作 匹配手机号,匹配中文,替换 正则匹配hy_user表内tel字段的电话号码: SELECT * FROM hy_user WHERE tel REGEXP "[1][ ...

  9. js匹配正则匹配手机号/固话/带括号区号固话

    js匹配正则匹配手机号/固话/带括号区号固话 var test = document.getElementsByTagName('body')[0].outerHTML; var array =tes ...

最新文章

  1. 如何阅读JAVA 字节码(一)
  2. 回文数python_回文数 python
  3. 网站使用CloudFlare
  4. 平院Python习题
  5. [转]iOS开发使用半透明模糊效果方法整理
  6. 使用pytesseract识别简单验证码
  7. “干掉”程序员饭碗后,OpenAI 又对艺术家下手了!
  8. 设计模式之GOF23原型模式01
  9. Ubuntu 18.04 网口创建网络共享
  10. 【BZOJ2563】阿狸和桃子的游戏 贪心
  11. 学习 stm32(TTL)串口通信控制16路舵机控制板(维特智能)
  12. 理解HTML HTTP API 和URL
  13. 【HDOJ】4210 Su-domino-ku
  14. 由电源IC芯片管理的,通过电感实现DC-DC升压电路详解
  15. java字符乱码问题_怎么解决java中的字符乱码问题
  16. idea炫酷主题推荐(本人自用)
  17. RedHadoop创始人童小军在北京开讲“Hadoop2.0集群优化与管理”啦!
  18. mysql 一边查询一边删除和一边新增一边查询判断所导致的问题
  19. 【动网论坛7.1 sp1 修改】-去掉阿里巴巴广告
  20. 信息系统项目管理重点:电子政务

热门文章

  1. ARM 汇编指令 MOV32用法
  2. php输出中文乱码问题
  3. Javascript基础 86个面试题汇总 (附答案)
  4. 阿里面试官:双亲委派都不懂就来面Java?
  5. 如何关闭iPhone 和iPad App 同步下载功能?
  6. android 清空回退栈,清空Fragment回退栈中某个Fragment
  7. 车载监控对消防有多重要?如何助力消防车辆智慧化监管?
  8. 如何开发及维护一个可运营性很高的电商系统
  9. 自组织网络(Ad Hoc Network)——TOPIC 4 IP地址和互联网协议【RIP内容更新】
  10. 【编码经验】数据结构与语法规范、计算机算法、架构模式设计、代码重构