验证手机和座机号码的正则表达式

在应用中验证电话号码是一个常见的功能,而电话号码包括手机号码和座机号码。今天写这个正则表达式写了比较久,记录在这里,以备后用。本文的一个基本假设:手机号码都是11位,座机号码加上区号也是11位

先科普一下座机区号的规则:点击科普。这是网易博客的一篇博文,简单说来座机区号是历史的产物,我也是看了这里才知道个大概。总结起来我认为可以归纳为这样:北京区号010,后面8位数;其他地区以以0为首位,2~9位次位,其余位为0~9。因此总结起来正则式应该是这样:

(010\d{8})|(0[2-9]\d{9})

而手机号则不一样了,手机号的号段不固定,目前能查阅到的运营商号段见下图:

观察可以发现13*系列号段是齐全的,而14开头的只有145、147两个号段,15和18号段除了缺失154、184之外也是齐全的。因此正则表达式列出如下:

(13\d{9})|(14[57]\d{8})|(15[0-35-9]\d{8})|(18[0-35-9]\d{8})

两者连接起来可以验证手机和座机号码,如下:

(010\d{8})|(0[2-9]\d{9})|(13\d{9})|(14[57]\d{8})|(15[0-35-9]\d{8})|(18[0-35-9]\d{8})

上述式子经过在线测试工具初步测试通过,如图:

这个表达式写得有些长,如果有更简洁的写法还请各位不吝赐教,谢谢!

本文出自 “飞翔的猫咪” 博客,请务必保留此出处http://flyingcat2013.blog.51cto.com/7061638/1576568

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。