分享一个我维护了几年的匹配国内手机号码的正则表达式列表

2019-01-07 14:16:17 +08:00
 vincentxue



项目地址是: https://github.com/VincentSit/ChinaMobilePhoneNumberRegex

列了一些常用的情况,例如匹配所有号码、所有支持短信功能的号码,包括手机卡、数据卡( IoT )和上网卡以及细分运营商匹配等。

初衷是由于国家一直在放出和使用新的号段,有些使用新的号段的用户无法通过手机号码的正则验证,网上很多正则并不能及时地更新,去找了下开源的项目也没人做这个事,我就自己写了一个。

最近更新支持了最新的号段,做了有限的测试,发到这里一是考虑自身水平有限,请各位大佬提提建议,找找 bug,二是广而告之,希望能帮助到有需要的同学。

关于测试方面,我的设想是想给每个常用语言做一个开源库包含这些正则,该语言相关的测试会在库源码里做。这样使用起来就可以直接引用库封装好的代码,更省事一些。但是我实现了一个语言后发现这是个大坑,得慢慢填。

需要说明的是因为考虑到方便使用的原因,有些正则其实并不是传统意义上极致优化的,可以根据自身需要去修改。例如不需要匹配国家码,可以去掉匹配国家码的那一段。但除非匹配量非常巨大,否则这个性能差别是可以忽略的。我在我机器上用 PHP 7 测了一下匹配一百多万行的手机号码,性能差距还是能接受的。
7938 次点击
所在节点    分享创造
61 条回复
vincentxue
2019-01-12 22:58:34 +08:00
@lhjl1314

我的资料依据是我文档上附上的那个维基百科,你说的 1349 也是卫星电话资料上确实也是这样显示的,我是根据运营商来分类的,没有根据网络来分类,所以就随维基归到电信里面了。其他的 172 我找不到公开资料,“ 184 部分号段、1064[78]也是分配给物联网的等” 184 没查到,1064 查到确实是也分配给了物联网。

感谢批评指正,确实还没有做到绝对精准,我会去查查工信部的相关文档,再提升一下准确性。如果你有相关资料方便共享的话也可以分享一下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/524624

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX