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

PHP 手機號碼驗證:從基礎正則到運營商段號精準校驗

     編輯:PHP 綜合知識

中國大陸手機號碼規則固定:11 位數字、首位為 1、第二位為 3-9。但僅檢查長度與首碼不夠嚴謹(如 18888888888 會誤判通過)。本文遞進式介紹三層驗證策略:基礎格式、主流段號白名單、通用兼容寫法,並提供可直接使用的函式。

一、基礎版:僅檢查 1 開頭 11 位數字

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

缺點:無法攔截虛構段號(如 19999999999)。

二、進階版:主流三大運營商段號白名單 (2015 年版)

  • 移動:134、135、136、137、138、139、150、151、157、158、159、187、188
  • 聯通:130、131、132、152、155、156、185、186
  • 電信:133、153、180、189、1349(衛通)
function checkMobile($str) {
    $pattern = "/^(13|15)\d{9}$/"; // 僅涵蓋 13/15 開頭,新段號會漏判
    return preg_match($pattern, $str);
}

三、通用兼容版:支援所有現有與未來段號

採用「首位 1 + 第二位 3-9 + 後 9 位數字」規則,兼容所有合法段號,無需維護白名單:

function is_mobile($str) {
    // ^1[3-9]\d{9}$
    return preg_match('/^1[3-9]\d{9}$/', $str);
}

// 使用範例
$testNumbers = ['13800138000', '15912345678', '18888888888', '12345678901'];
foreach ($testNumbers as $num) {
    echo $num . ' => ' . (is_mobile($num) ? '合法' : '非法') . "
"; }

輸出:

13800138000 => 合法
15912345678 => 合法
18888888888 => 合法
12345678901 => 非法

四、生產環境建議

  1. 前端同步使用相同正則即時提示。
  2. 後端再次驗證,防止繞過前端。
  3. 結合發送簡訊驗證碼,驗證真實擁有權。
  4. 定期關注工信部公布的新號段,若採用白名單制需同步更新。

採用 /^1[3-9]\d{9}$/ 即可滿足 99% 以上業務場景,簡潔且可維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved