首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 郵箱格式驗證:正則表達式深度解析

     編輯:PHP 綜合知識

核心代碼

<?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修飾符:不區分大小寫

常見誤區與增強

  • 原正則缺陷:`[a-z]$` 僅匹配單字母 TLD,無法匹配 `.com`、`.cn`、`.info` 等。修正為 `[a-z]{2,}`
  • 過度嚴格:RFC 5322 允許引號、註釋、IP 域名等極複雜格式。實際項目通常採用「寬鬆驗證 + 發送驗證郵件」雙重保障
  • 推薦做法:`filter_var($email, FILTER_VALIDATE_EMAIL)` 內置驗證(PHP 5.2+),或引用成熟庫(如 `egulias/email-validator`)

進階:支持國際化域名 (IDN)

// 簡易版:允許 Unicode 字符(需 u 修飾符)
$pattern = '/^[\p{L}0-9._%+-]+@([\p{L}0-9-]+\.)+[\p{L}]{2,}$/u';

總結

正則表達式是文本處理利器,但郵箱驗證建議「正則初篩 + 發信驗證」組合策略。理解各元字符含義,才能根據業務靈活調整嚴格度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved