<?php
$email = 'user@example.com';
if (preg_match('/^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,}$/i', $email)) {
echo '郵箱格式通過初步檢查';
} else {
echo '郵箱格式不正確';
}
?>
注意:原文使用 `eregi`(不區分大小寫 POSIX 正則),PHP 5.3+ 棄用,PHP 7.0+ 移除。現代代碼請使用 `preg_match` + `i` 修飾符。
/^ # 字符串開始
[_.0-9a-z-]+ # 用戶名:字母、數字、下劃線、點、連字符,至少一個
@ # 必須包含 @
( # 域名部分分組開始
[0-9a-z] # 首字符:字母或數字
[0-9a-z-]+ # 中間:字母、數字、連字符,至少一個
\. # 必須以點結尾(轉義)
)+ # 域名分組至少出現一次(支持多級域名)
[a-z]{2,} # 頂級域:至少兩個字母
$/i # 字符串結束,i=不區分大小寫
| 符號 | 說明 |
|---|---|
^ | 錨定字符串開頭 |
$ | 錨定字符串結尾 |
+ | 前一元素出現 1 次或多次 |
* | 前一元素出現 0 次或多次 |
{n,m} | 前一元素出現 n 到 m 次 |
\. | 轉義點號,匹配字面 `.` |
[] | 字符類,匹配括號內任一字符 |
() | 分組,可套用量詞、捕獲子串 |
i | 修飾符:不區分大小寫 |
// 簡易版:允許 Unicode 字符(需 u 修飾符)
$pattern = '/^[\p{L}0-9._%+-]+@([\p{L}0-9-]+\.)+[\p{L}]{2,}$/u';
正則表達式是文本處理利器,但郵箱驗證建議「正則初篩 + 發信驗證」組合策略。理解各元字符含義,才能根據業務靈活調整嚴格度。