PHP 正则匹配手机号(国内)

PHP 正则匹配手机号(国内)

PHP提供了多种内置的正则匹配函数,如php_filter()php_grep()php_match_all()等,最重要的是我们要根据要判定的数据要求,来精准判定,以此来达到最后的目的。

本次,我们判定国内的手机号格式,要求:不匹配卫星电话的号段

电信网编号总览

序号号码长度备注正则规则
113x11公众移动通信网网号^13(4[0-8]\d{7}|[0-3|5-9]\d[0-9]\d{8})$
2134911公众移动通信网网号,卫星移动通信业务专用号段^1349\d{7}$
3140XX13中国联通物联网网号^140\d{10}$
4141XX13中国电信物联网网号^141\d{10}$
5142XX~143XX13物联网网号^142\d{10}$
6144XX13中国移动物联网网号^144\d{10}$
7145~14911公众移动通信网网号^14[5-9]\d{8}$
815X11公众移动通信网网号^15\d{9}$
9161~16211公众移动通信网网号^16[1-2]\d{8}$
10164~16711公众移动通信网网号^16[4-7]\d{8}$
11170~17811公众移动通信网网号^17[0-8]\d{8}$
1217411公众移动通信网网号,卫星移动通信业务专用号段^174\d{8}$
1318X11公众移动通信网网号^18\d{9}$
1419X11公众移动通信网网号^19\d{9}$

标记为公众移动通信网网号的为运营商可以使用的、用于个人通讯业务的号段。
开放的号段并非全部都已使用,只是指运营商可以在其内开展、经营业务。

移动

序号运营商号码长度备注正则规则
1中国移动134~13911公众移动通信网网号,1349除外^13(4[0-8]\d{7}|[5-9]\d{8})$
2中国移动14711公众移动通信网网号,TD数据卡专用^147\d{8}$
3中国移动150~15211公众移动通信网网号^15[0-2]\d{8}$
4中国移动157~15911公众移动通信网网号^15[7-9]\d{8}$
5中国移动17211公众移动通信网网号,2014新增^172\d{8}$
5中国移动17811公众移动通信网网号,2014新增^178\d{8}$
6中国移动182~18411公众移动通信网网号^18[2-4]\d{8}$
7中国移动187~18811公众移动通信网网号,188TD专用^18[7-8]\d{8}$
8中国移动19811公众移动通信网网号^198\d{8}$

联通

序号运营商号码长度备注正则规则
1中国联通130~13211公众移动通信网网号^13[0-2]\d{8}$
2中国联通145~14611公众移动通信网网号,145TD数据卡专用^14[5-6]\d{8}$
3中国联通155~15611公众移动通信网网号^15[5-6]\d{8}$
4中国联通16611公众移动通信网网号^166\d{8}$
5中国联通175~17611公众移动通信网网号^17[5-6]\d{8}$
6中国联通185~18611公众移动通信网网号^18[5-6]\d{8}$

电信

序号运营商号码长度备注正则规则
1中国电信13311公众移动通信网网号^133\d{8}$
2中国电信14911公众移动通信网网号^149\d{8}$
3中国电信15311公众移动通信网网号^153\d{8}$
4中国电信17311公众移动通信网网号^173\d{8}$
5中国电信17711公众移动通信网网号^177\d{8}$
6中国电信18011公众移动通信网网号^180\d{8}$
7中国电信18111公众移动通信网网号^181\d{8}$
8中国电信18911公众移动通信网网号^189\d{8}$
9中国电信19111公众移动通信网网号^191\d{8}$
10中国电信19911公众移动通信网网号^199\d{8}$

综合匹配正则

^1((34[0-8]\d{7})|((3[0-3|5-9])|(4[5-7|9])|(5[0-3|5-9])|(66)|(7[2-3|5-8])|(8[0-9])|(9[1|8|9]))\d{8})$

上述正则有能力优化的同学请留下你的作业o(*^@^*)o

示例

// PHP 正则校验手机号合法性
function check_phone_num($phone_num) {
    if (preg_match("/^1((34[0-8]\d{7})|((3[0-3|5-9])|(4[5-7|9])|(5[0-3|5-9])|(66)|(7[2-3|5-8])|(8[0-9])|(9[1|8|9]))\d{8})$/", $phone_num)) {
        echo "合法\n";
    } else {
        echo "不合法\n";
    }
}

// 测试
check_phone_num(1589890023); //不合法
check_phone_num(13492787590); //不合法
check_phone_num(17612343210); //合法
check_phone_num(16199008987); //不合法
check_phone_num(17099008987); //不合法

提示

  1. 严格意义上来讲,类似这种/^1[34578]\d{9}$/写法是不够严谨的,可能造成后续短信验证号码为空的情况,从而丧失获取手机号的作用;
  2. 根据需求需要对一些特别号段,比如上述号段在匹配时,我们不允许卫星电话号段注册;
  3. 需要关注工信部相关的新闻,及时更新匹配规则。

勘误

欢迎各位发现数据存在问题的同学及时评论勘误!


数据来源:

  1. 电信网编号计划(2017年版)
  2. 百度知道-184号段是中国移动的吗?
  3. 百度知道-目前中国联通的号段有哪些
  4. 百度知道-中国电信号码段都有哪些

推荐阅读:

  1. PHP 正则表达式(PCRE)
  2. 史上最全的PHP正则表达式(手机号需要加上177-***)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值