表單驗證手機號碼格式並查詢歸屬地是常見需求。本文提供 PHP 正則驗證函數 (支援最新號段) 及呼叫淘寶公開 API 查詢歸屬地的完整實作。
function checkMobileValidity(string $mobile): bool {
// 支援 13/14/15/16/17/18/19 開頭,共 11 位數字
$pattern = '/^1[3-9]\d{9}$/';
return (bool)preg_match($pattern, $mobile);
}
// 測試
var_dump(checkMobileValidity('13800138000')); // true
var_dump(checkMobileValidity('12345678901')); // false
正則說明:^1[3-9]\d{9}$ 涵蓋所有現行中國大陸手機號段 (13-19 開頭),長度固定 11 碼。比舊版分段列舉更簡潔好維護。
function checkMobilePlace(string $mobile): string {
$url = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel={$mobile}&t=" . time();
$content = @file_get_contents($url);
if (!$content) return "查詢失敗";
// 回應格式: __GetZoneResult_ = { ... province:'浙江', catName:'中国移动', ... }
// 簡易解析
preg_match("/province:'([^']+)'/", $content, $mProv);
preg_match("/catName:'([^']+)'/", $content, $mCat);
$province = $mProv[1] ?? '未知';
$carrier = $mCat[1] ?? '未知';
return "{$province} {$carrier}";
}
// 使用
echo checkMobilePlace('13800138000'); // 輸出: 浙江 中国移动
ip2region 手機號版) 或三大運營商官方介面。mb_convert_encoding($content, 'UTF-8', 'GBK')。mobile_place:{prefix} (前 7 碼)。下載最新 mobile_area.csv (格式: 號段,省份,城市,運營商),匯入 MySQL/Redis:
CREATE TABLE mobile_prefix (
prefix CHAR(7) PRIMARY KEY,
province VARCHAR(20),
city VARCHAR(20),
carrier VARCHAR(20)
);
-- 查詢
SELECT province, carrier FROM mobile_prefix WHERE prefix = LEFT($mobile, 7);
離線查詢零延遲、無外部依賴,適合高併發場景。
手機號驗證採用簡潔正則 /^1[3-9]\d{9}$/ 即可覆蓋全號段。歸屬地查詢開發期可用淘寶 API 快速驗證,正式上線強烈建議部署離線號段庫,確保高可用與資料主權。