郵箱驗證需前後端同步:前端即時提升體驗,後端確保資料安全。本文提供符合 RFC 5322 的嚴格正則與 PHP 內建過濾器兩種方案,並說明適用場景。
function isEmail(email) {
return /^((([a-z]|\d|[!#$%&'*+\-/=?^_`{|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#$%&'*+\-/=?^_`{|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(email);
}
function validateEmail(val) {
return /^[a-zA-Z0-9._]+[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,4}$/.test(val);
}
function isEmail($mail_address) {
return filter_var($mail_address, FILTER_VALIDATE_EMAIL);
}
$pattern = '/^([\w._]{2,10})@(\w{1,})\.([a-z]{2,4})$/';
if (preg_match($pattern, $email)) { /* 合法 */ }
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| JS 嚴格正則 | 精準度高,支援國際化郵箱 | 正則複雜,維護成本大 | 註冊、登入等核心表單 |
| JS 簡易正則 | 簡潔易讀 | 會誤攔截合法郵箱(如新頂級域) | 內部工具、快速原型 |
| PHP filter_var | 官方維護、效能好、無需維護正則 | 規則相對寬鬆 | 所有後端驗證首選 |
| PHP 自定義正則 | 可精確控制業務規則 | 需自行維護測試用例 | 特殊業務限制(如僅允許企業郵箱) |
user+tag@example.com、user@sub.domain.tld)。