專案中反覆出現的表單驗證邏輯,若分散在各處極難維護。將常用正則封裝為獨立函式,不僅提升複用性,更能統一錯誤處理與擴展邏輯。
function isNumber($val) {
return (bool) preg_match('/^[0-9]+$/', $val);
}
說明:僅允許純數字,不含正負號、小數點。若需支援負整數,改用 /^-?[0-9]+$/。
function isPhone($val) {
// 支援 13-19 開頭的 11 位數字
return (bool) preg_match('/^1[3-9]\d{9}$/', $val);
}
說明:隨運營商號段擴展,建議定期更新規則或引入專門庫(如 overtrue/phonenumber)。
function isQQ($val) {
// 5-13 位,首位非 0
return (bool) preg_match('/^[1-9]\d{4,12}$/', $val);
}
function isUrl($url) {
$pattern = '/^https?:\/\/' // 協議
. '(' // 主機部分
. '(([0-9]{1,3}\.){3}[0-9]{1,3})' // IP 格式
. '|' // 或
. '([0-9a-z_!~\*\'\(\)\-]+\.)*' // 子域名
. '([0-9a-z][0-9a-z\-]{0,61})?[0-9a-z]\.' // 二級域名
. '[a-z]{2,6})' // 頂級域名
. '(:[0-9]{1,4})?' // 端口
. '((\/\?)|' // 路徑或查詢
. '(\/[0-9a-zA-Z_!~\*\'\(\)\[\]\.;\?:@&=\+\$,%#\-\/]*)?)'
. '$/i';
return (bool) preg_match($pattern, $url);
}
說明:支援 IP、域名、子域名、端口、路徑與查詢字串;i 修飾符忽略大小寫。
$phone = '15093691582';
if (isPhone($phone)) {
echo '手機號格式正確';
} else {
echo '手機號格式錯誤';
}
filter_var()(如 FILTER_VALIDATE_EMAIL、FILTER_VALIDATE_URL)處理標準格式。掌握這些基礎驗證模式,能解決 90% 以上的表單檢核需求。更複雜的身份證、銀行卡、郵編等驗證,建議引入成熟的驗證套件(如 respect/validation)。