中國大陸手機號碼規則固定:11 位數字、首位為 1、第二位為 3-9。但僅檢查長度與首碼不夠嚴謹(如 18888888888 會誤判通過)。本文遞進式介紹三層驗證策略:基礎格式、主流段號白名單、通用兼容寫法,並提供可直接使用的函式。
$mobile = '15858588585';
if (!preg_match('/^1[0-9]{10}$/', $mobile)) {
exit('手機號碼格式不正確');
}
缺點:無法攔截虛構段號(如 19999999999)。
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[3-9]\d{9}$/ 即可滿足 99% 以上業務場景,簡潔且可維護。