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. 嚴格意義上來講,類似這種/^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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM