13-9(各運營商分配段不同)0-9if (!preg_match('/^1[0-9]{10}$/', $mobile)) {
exit('手機號碼格式不正確');
}
缺點:`10000000000`、`18888888888` 皆通過,無法攔截明顯無效號段。
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(騰訊云、阿里云、極光等)。
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;
}