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

PHP 自定義郵箱格式驗證函數 (RFC 5322 兼容)

     編輯:PHP 綜合知識

函數代碼

<?php
function isValidEmail($email) {
    $qtext = '[^\x0d\x22\x5c\x80-\xff]';
    $dtext = '[^\x0d\x5b-\x5d\x80-\xff]';
    $atom  = '[^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+';
    $quotedPair = '\x5c[\x00-\x7f]';
    $domainLiteral = "\x5b($dtext|$quotedPair)*\x5d";
    $quotedString  = "\x22($qtext|$quotedPair)*\x22";
    $domainRef = $atom;
    $subDomain = "($domainRef|$domainLiteral)";
    $word = "($atom|$quotedString)";
    $domain = "$subDomain(\x2e$subDomain)*";
    $localPart = "$word(\x2e$word)*";
    $addrSpec = "$localPart\x40$domain";

    return (bool)preg_match("!^$addrSpec$!", $email);
}

// 測試
var_dump(isValidEmail('user@example.com'));        // true
var_dump(isValidEmail('"quoted@local"@domain.com')); // true
var_dump(isValidEmail('invalid'));                 // false
?>

現代最佳實踐

PHP 5.2+ 內置 filter_var() 更簡潔、維護性更強:

$email = 'test@example.com';
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo '格式合法';
} else {
    echo '格式非法';
}

對比

方案優點缺點
自定義正則可精確控制規則、無依賴極難覆蓋所有 RFC 邊界情況、維護困難
filter_var官方維護、性能好、代碼簡潔PHP 版本差異、不支持部分極罕見合法地址
第三方庫 (eg. egulias/email-validator)完全 RFC 兼容、支持 DNS/MX 驗證引入依賴、體積較大

建議

  • 大多數業務直接用 filter_var($email, FILTER_VALIDATE_EMAIL)。
  • 註冊/登錄關鍵流程可額外發送驗證郵件確認所有權(格式合法 ≠ 真實存在)。
  • 若需嚴格 RFC 合規,Composer 引入 egulias/email-validator。.
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved