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

正則表達式驗證 Email 與 URL:PHP 實作範例與改進建議

     編輯:PHP 相關知識

原始碼分析

提供的程式碼使用 eregi_replace(已棄用)嘗試將字串中的 Email 與 URL 自動轉為超連結。主要問題在於正則模式不夠嚴謹,且未處理巢狀標籤、特殊字符等邊界情況。

改進版:使用 PCRE (preg_replace)

<?php
function auto_link($text) {
    // Email 轉換
    $text = preg_replace(
        '/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/',
        '<a href="mailto:$1">$1</a>',
        $text
    );
    // URL 轉換 (簡化版,實際建議使用成熟庫)
    $text = preg_replace(
        '/(https?:\/\/[^\s<>"]+)/',
        '<a href="$1" target="_blank">$1</a>',
        $text
    );
    return $text;
}

$input = "聯絡我: test@example.com 或訪問 https://example.com";
echo auto_link($input);
?>

正則模式解析

模式說明
[a-zA-Z0-9._%+-]+郵箱本地部分:允許字母、數字、點、底線、百分號、加減號
@必須包含 @ 符號
[a-zA-Z0-9.-]+域名部分:字母、數字、點、連字號
\.[a-zA-Z]{2,}頂級域:點開頭,至少兩個字母
https?://[^\s<>"]+URL:http/https 開頭,後接非空白、非標籤字符

補充建議

  • Email 驗證建議使用 filter_var($email, FILTER_VALIDATE_EMAIL) 內建函式。
  • URL 解析複雜度高,生產環境推薦使用 league/url 或類似套件。
  • 避免在正則中使用 .* 貪婪匹配,改用 .*? 或字符類排除。
  • 輸出前務必 htmlspecialchars 防 XSS。

結語

正則表達式功能強大但易寫難維護。簡單場景可自行撰寫,複雜驗證請善用成熟庫與內建函式,確保正確性與安全性。

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