首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 手機號碼驗證完整指南:從基礎正則到運營商段號精準匹配

     編輯:PHP 相關知識

中國手機號碼規則基礎

  • 11 位數字
  • 首位固定為 1
  • 第二位通常為 3-9(各運營商分配段不同)
  • 剩餘 9 位為 0-9

階段一:最簡單驗證(僅檢查長度與首位)

if (!preg_match('/^1[0-9]{10}$/', $mobile)) {
    exit('手機號碼格式不正確');
}

缺點:`10000000000`、`18888888888` 皆通過,無法攔截明顯無效號段。

階段二:依據三大運營商號段精準驗證(2023 年常見段)

function checkMobile($str) {
    // 整合移動、聯通、電信、廣電主流號段
    $pattern = '/^1(?:3[\d]|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8[\d]|9[0-9])\d{8}$/';
    return (bool)preg_match($pattern, $str);
}

// 測試
var_dump(checkMobile('13800138000')); // true
var_dump(checkMobile('1008610086'));  // false

號段正則拆解

運營商號段範例正則片段
移動134-139、147、150-152、157-159、178、182-184、187-188、198`3[\d]|4[7]|5[0-27-9]|6[?]|7[8]|8[2-47-8]|9[8]`
聯通130-132、145、155-156、166、175-176、185-186、196`3[0-2]|4[5]|5[5-6]|6[6]|7[5-6]|8[5-6]|9[6]`
電信133、149、153、173、177、180-181、189、199`3[3]|4[9]|5[3]|7[37]|8[019]|9[9]`
廣電192`9[2]`

上方綜合正則已涵蓋主流段,隨運營商新增號段需定期維護。

階段三:嚴格模式(排除虛擬段、保留段)

若業務極度敏感(如金融實名),可採用「白名單」策略:維護一份官方最新號段陣列,逐一比對。或接入三方實名認證 API(騰訊云、阿里云、極光等)。

常見誤區與最佳實踐

  1. 不要只驗證前 3/7 位:號段隨時擴充,建議驗證前 3-4 位 + 總長度 11 位。
  2. 前端+後端雙重驗證:前端即時提示體驗佳,後端攔截繞過前端的請求。
  3. 國際化支援:若面向海外用戶,請使用 `libphonenumber`(Google 開源庫)而非自寫正則。
  4. 效能:正則編譯有開銷,高頻調用可預編譯(`$re = '/^1...$/';` 定義在函數外)或使用 `filter_var` 搭配自定義回調。

一鍵複製:生產環境推薦函數

function isValidChineseMobile(string $mobile): bool {
    // 2024-01 整理的主流段,定期更新
    static $pattern = '/^1(?:3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9\d)\d{8}$/';
    return preg_match($pattern, $mobile) === 1;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved