1

手机号正则表达式

 2 years ago
source link: https://segmentfault.com/a/1190000041150918
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

手机号正则发展历程

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

/^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})?$/

原文链接


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK