PHP 正则匹配手机号

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

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

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

电信网编号总览

序号号码长度备注正则规则
1 13x 11 公众移动通信网网号 ^13(4[0-8]d{7}|[0-3|5-9]d[0-9]d{8})$
2 1349 11 公众移动通信网网号,卫星移动通信业务专用号段 ^1349d{7}$
3 140XX 13 中国联通物联网网号 ^140d{10}$
4 141XX 13 中国电信物联网网号 ^141d{10}$
5 142XX~143XX 13 物联网网号 ^142d{10}$
6 144XX 13 中国移动物联网网号 ^144d{10}$
7 145~149 11 公众移动通信网网号 ^14[5-9]d{8}$
8 15X 11 公众移动通信网网号 ^15d{9}$
9 161~162 11 公众移动通信网网号 ^16[1-2]d{8}$
10 164~167 11 公众移动通信网网号 ^16[4-7]d{8}$
11 170~178 11 公众移动通信网网号 ^17[0-8]d{8}$
12 174 11 公众移动通信网网号,卫星移动通信业务专用号段 ^174d{8}$
13 18X 11 公众移动通信网网号 ^18d{9}$
14 19X 11 公众移动通信网网号 ^19d{9}$

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

移动

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

联通

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

电信

序号运营商号码长度备注正则规则
1 中国电信 133 11 公众移动通信网网号 ^133d{8}$
2 中国电信 149 11 公众移动通信网网号 ^149d{8}$
3 中国电信 153 11 公众移动通信网网号 ^153d{8}$
4 中国电信 173 11 公众移动通信网网号 ^173d{8}$
5 中国电信 177 11 公众移动通信网网号 ^177d{8}$
6 中国电信 180 11 公众移动通信网网号 ^180d{8}$
7 中国电信 181 11 公众移动通信网网号 ^181d{8}$
8 中国电信 189 11 公众移动通信网网号 ^189d{8}$
9 中国电信 191 11 公众移动通信网网号 ^191d{8}$
10 中国电信 199 11 公众移动通信网网号 ^199d{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 "合法
";
    } else {
        echo "不合法
";
    }
}

// 测试
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. 百度知道-中国电信号码段都有哪些

转自:https://blog.csdn.net/Chinakeep/article/details/106093218?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf

原文地址:https://www.cnblogs.com/nxmxl/p/13686711.html