1
头图

手机号正则发展历程

当时考虑到运营商只会提供某些号段的手机号,所以正则表达式是下面的样子:

/^1([38]\d|5[0-35-9]|7[3678])\d{8}$/

可以看出是用来匹配13X,18X,15X,17X 这些号段。

随后由于手机号不够用,又新增了166、198、199号段的手机号,所以正则表达式也要作相应改进:

/^1([38][0-9]|5[0-35-9]|6[6]|7[0135678]|9[89])\d{8}$/

到现在,手机号段新增令人发指,直逼我们使用简单粗暴的校验方式:

/^1(3|4|5|6|7|8|9)\d{9}$/

// 或者
/^1[3456789]d{9}$/

以后,如果有了12X的手机号,干脆就这样写了:

/^\d{11}$/

随着手机号的日益丰富,我们在放弃了一些追求的同时,也收获了简单。simple life。

那么,如果要校验国际手机号呢?首先去做个调查:

各国手机号为数不定有多有少。包括香港都和大陆不一样,香港8位。
德国为10位
日本也十一位
加拿大 和固定电话一样,7位数
新西兰的通常是9位数
英国11位
台湾的手机号10位
印度十位
阿联酋7位
瑞士10位
新加坡手机号跟固定电话一样是8位
荷兰手机和固定电话都是10位
比利时的手机号是10位
泰国:9位数号码
法国的10位

看来我们只能校验一个范围内的数字了5-11的数字:

/^\d{5,11}$/

那如果又要校验座机号呢?听到这里你可能要说:去他妈的了。不过还是没有忍住去查了一下座机号的构成规则:

(我国的特服电话1开头,普通固话2-9开头)
座机号可以有3位区号+8位本地号+分机号(1到4位)
或者是 4位区号+7位本地号+分机号(1到4位)
其中区号 分机号可能是没有的,所以正则:

 /^((([0-9]{3}-)?[0-9]{8})|(([0-9]{4}-)?[0-9]{7}))(-[0-9]{1,4})?$/

原文链接


来了老弟
508 声望31 粉丝

纸上得来终觉浅,绝知此事要躬行