场景实训 - 匹配手机号

  • 作者:KK

  • 发表日期:2018.6.19


手机号介绍

手机号其实在不同的国家是有不同的位数长度的,其中在中国就有过10位的历史,现在又改成了11位。另外大家长时间使用下来也发现了,手机号前面还有+86这个东西,是代表国家的一个号码,比如英国是+44,美国是+842,法国是+33等,而后面有多少个数字就具体每个国家自己定咯。


为什么要匹配手机号

通常我们用正则表达式匹配手机号无非就是为了确认用户输入的是不是一个合法的手机号,因为现在太多应用在账号数据的处理功能上都需要手机号了,所以大家都需要懂得这一招。


国内手机号表达式

表达式:^[1-9]\d{10}$(以非0的数字开头,后面加10位数字,共11位),只要这样校验,你的业务基本上不会有用户错输手机号格式了。


不建议校验是13几之类的开头

有人发现手机老是159、137、133什么的开头,于是会这样写^(13|15|18)\d{9}$,但自从国家开放虚拟运营商资质经营和170号段后都蒙了,于是都去掉了项目里的这些校验,不管了,只要是数字就好,因为未来会开放啥前缀号码根本不可预料啊!


兼容国外手机号

有些应用的用户群是在海外的,于是为了方便一些身处国外的用户填写他们的手机号以在必要时能联系到他们,这些应用就没使用11位的校验,而是\+{0,1}\d{6,}大概这样的表达式(具体的表达式见人见智了,反正不是常见,少量项目用的,他们有自己的想法),这样虽然用户有可能输入不到11位的(大部分用户肯定是国内的啦),但实际上不用过度担心,实践证明大部分用户不会这么恶搞,而且短信校验的时候都不好过,不用考虑得太极端,格式上符合就好了。


号码资源的思考

手机号不用了之后会被电信运营商回收并重新出售的,下一个买到这个号码的人可能使用某个软件时会发现该号码已经注册(现在开始已经时有相关新闻了),而且并不是所有应用都支持注销手机账号的(常接触的应用就没几个允许的),所以许多年后,许多手机号都在各种主流应用上注册过了,新应用才没有而已,这会不会使得手机号资源被慢慢耗尽而不再受人欢迎呢?除非主流应用会换一轮,那就可以在新的应用上注册了,又除非国家继续放号,只是号码会越来越长不好记。

这当然不是一个很极端的未来,只是有那么一点儿可能会出现,相信社会是有合适的解决办法的,就现在而言大家都还是很需要手机号作为账号。