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 | 公众移动通信网网号,卫星移动通信业务专用号段 | ^1349\d{7}$ |
3 | 140XX | 13 | 中国联通物联网网号 | ^140\d{10}$ |
4 | 141XX | 13 | 中国电信物联网网号 | ^141\d{10}$ |
5 | 142XX~143XX | 13 | 物联网网号 | ^142\d{10}$ |
6 | 144XX | 13 | 中国移动物联网网号 | ^144\d{10}$ |
7 | 145~149 | 11 | 公众移动通信网网号 | ^14[5-9]\d{8}$ |
8 | 15X | 11 | 公众移动通信网网号 | ^15\d{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 | 公众移动通信网网号,卫星移动通信业务专用号段 | ^174\d{8}$ |
13 | 18X | 11 | 公众移动通信网网号 | ^18\d{9}$ |
14 | 19X | 11 | 公众移动通信网网号 | ^19\d{9}$ |
标记为公众移动通信网网号的为运营商可以使用的、用于个人通讯业务的号段。
开放的号段并非全部都已使用,只是指运营商可以在其内开展、经营业务。
移动
序号 | 运营商 | 号码 | 长度 | 备注 | 正则规则 |
---|---|---|---|---|---|
1 | 中国移动 | 134~139 | 11 | 公众移动通信网网号,1349除外 | ^13(4[0-8]\d{7}|[5-9]\d{8})$ |
2 | 中国移动 | 147 | 11 | 公众移动通信网网号,TD数据卡专用 | ^147\d{8}$ |
3 | 中国移动 | 150~152 | 11 | 公众移动通信网网号 | ^15[0-2]\d{8}$ |
4 | 中国移动 | 157~159 | 11 | 公众移动通信网网号 | ^15[7-9]\d{8}$ |
5 | 中国移动 | 172 | 11 | 公众移动通信网网号,2014新增 | ^172\d{8}$ |
5 | 中国移动 | 178 | 11 | 公众移动通信网网号,2014新增 | ^178\d{8}$ |
6 | 中国移动 | 182~184 | 11 | 公众移动通信网网号 | ^18[2-4]\d{8}$ |
7 | 中国移动 | 187~188 | 11 | 公众移动通信网网号,188TD专用 | ^18[7-8]\d{8}$ |
8 | 中国移动 | 198 | 11 | 公众移动通信网网号 | ^198\d{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 | 公众移动通信网网号 | ^166\d{8}$ |
5 | 中国联通 | 175~176 | 11 | 公众移动通信网网号 | ^17[5-6]\d{8}$ |
6 | 中国联通 | 185~186 | 11 | 公众移动通信网网号 | ^18[5-6]\d{8}$ |
电信
序号 | 运营商 | 号码 | 长度 | 备注 | 正则规则 |
---|---|---|---|---|---|
1 | 中国电信 | 133 | 11 | 公众移动通信网网号 | ^133\d{8}$ |
2 | 中国电信 | 149 | 11 | 公众移动通信网网号 | ^149\d{8}$ |
3 | 中国电信 | 153 | 11 | 公众移动通信网网号 | ^153\d{8}$ |
4 | 中国电信 | 173 | 11 | 公众移动通信网网号 | ^173\d{8}$ |
5 | 中国电信 | 177 | 11 | 公众移动通信网网号 | ^177\d{8}$ |
6 | 中国电信 | 180 | 11 | 公众移动通信网网号 | ^180\d{8}$ |
7 | 中国电信 | 181 | 11 | 公众移动通信网网号 | ^181\d{8}$ |
8 | 中国电信 | 189 | 11 | 公众移动通信网网号 | ^189\d{8}$ |
9 | 中国电信 | 191 | 11 | 公众移动通信网网号 | ^191\d{8}$ |
10 | 中国电信 | 199 | 11 | 公众移动通信网网号 | ^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[34578]\d{9}$/
写法是不够严谨的,可能造成后续短信验证号码为空的情况,从而丧失获取手机号的作用; - 根据需求需要对一些特别号段,比如上述号段在匹配时,我们不允许卫星电话号段注册;
- 需要关注工信部相关的新闻,及时更新匹配规则。
勘误
欢迎各位发现数据存在问题的同学及时评论勘误!
数据来源:
转自: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