疑难技术点汇总(一)---手机号正则匹配
前言
在项目开发中,验证用户输入的手机号格式是否正确,是一个非常常见的需求。
本人的资料检索水平有限,未找到比较权威的说明文档。因此只能动手,丰衣足食。
本着授人以鱼不如授人以渔的想法,现将该需求的实现细节罗列如下:
手机号号段信息汇总
中国电信号段: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#等对应的工具方法也可以很简单地实现,这里就不再赘述,有兴趣的可以自行实现。而且如果后续添加了新的手机号定义规则,也可以很简单地加以完善。
疑难技术点汇总(一)---手机号正则匹配相关推荐
- Vue手机号正则匹配,姓名加密展示
一丶手机号 (1)正则匹配 if (!/^1[3|4|5|6|7|8|9]\d{9}$/.test(13807999985)) {console.log(resultPhone);//138****9 ...
- MySQL 2019最全的国家地区代码、手机号正则验证,覆盖191个国家和地区
功能亮点: 最新的手机号正则表达式,基于2018年12月份制作: 最全的手机号正则匹配和验证,涵盖191个国家和地区: 在多个大项目中实践,完美无压力,适应更多应用场景: 注意事项 关于JQ中ajax ...
- 最新JS正则匹配大全(工具类:不断更新)
一.回顾知识: . 点字符匹配除回车(\r).换行(\n).行分隔符(\u2028)和分段符(\u2029)之外的所有字符 注:码点大于0xFFFF的Unicode字符不能被匹配,因为会被认为是两个字 ...
- 正则匹配之正则匹配全部汇总:
正则匹配全部汇总: 1.匹配中文:[\u4e00-\u9fa5] 2.英文字母:[a-zA-Z] 3.数字:[0-9] 4.匹配中文,英文字母和数字及下划线:^[\u4e00-\u9fa5_a-zA- ...
- iOS正则匹配手机号
#pragma 正则匹配手机号 + (BOOL)validateMobile:(NSString *)mobileNum { /** * 手机号码 * 移动:134[0-8 ...
- mysql 替换非中文_mysql中的正则操作 匹配手机号,匹配中文,替换
mysql中的正则操作 匹配手机号,匹配中文,替换 正则匹配hy_user表内tel字段的电话号码: SELECT * FROM hy_user WHERE tel REGEXP "[1][ ...
- js正则匹配手机号、身份证号
正则匹配身份证号 <input v-if="!ableInput" type="number" v-model="phone" ...
- mysql中的正则操作 匹配手机号,匹配中文,替换
mysql中的正则操作 匹配手机号,匹配中文,替换 正则匹配hy_user表内tel字段的电话号码: SELECT * FROM hy_user WHERE tel REGEXP "[1][ ...
- js匹配正则匹配手机号/固话/带括号区号固话
js匹配正则匹配手机号/固话/带括号区号固话 var test = document.getElementsByTagName('body')[0].outerHTML; var array =tes ...
最新文章
- 如何阅读JAVA 字节码(一)
- 回文数python_回文数 python
- 网站使用CloudFlare
- 平院Python习题
- [转]iOS开发使用半透明模糊效果方法整理
- 使用pytesseract识别简单验证码
- “干掉”程序员饭碗后,OpenAI 又对艺术家下手了!
- 设计模式之GOF23原型模式01
- Ubuntu 18.04 网口创建网络共享
- 【BZOJ2563】阿狸和桃子的游戏 贪心
- 学习 stm32(TTL)串口通信控制16路舵机控制板(维特智能)
- 理解HTML HTTP API 和URL
- 【HDOJ】4210 Su-domino-ku
- 由电源IC芯片管理的,通过电感实现DC-DC升压电路详解
- java字符乱码问题_怎么解决java中的字符乱码问题
- idea炫酷主题推荐(本人自用)
- RedHadoop创始人童小军在北京开讲“Hadoop2.0集群优化与管理”啦!
- mysql 一边查询一边删除和一边新增一边查询判断所导致的问题
- 【动网论坛7.1 sp1 修改】-去掉阿里巴巴广告
- 信息系统项目管理重点:电子政务