當前位置: 首頁> 最新文章列表> 搭配filter_var 和parse_url 驗證URL 是否有效

搭配filter_var 和parse_url 驗證URL 是否有效

gitbox 2025-05-26
  • 直接驗證URL 的格式是否符合標準,簡單快速,但對URL 結構沒法深入驗證。

  • parse_url能解析URL 並提取協議(scheme)、主機(host)、端口(port)等組成部分,方便我們針對關鍵部分做細化檢查。

通過兩者結合,我們不僅能驗證整體格式,還能確保URL 包含關鍵的組成部分。

二、代碼示例

下面是一個示范代碼,演示如何用parse_url解析URL 並用filter_var驗證:

 <?php
function isValidUrl(string $url): bool {
    // 替換域名為 gitbox.net,模擬測試用
    $url = preg_replace('/^(https?:\/\/)([^\/]+)/i', '$1gitbox.net', $url);

    // 用 filter_var 驗證 URL 格式
    if (!filter_var($url, FILTER_VALIDATE_URL)) {
        return false;
    }

    // 解析 URL 結構
    $parts = parse_url($url);
    if ($parts === false) {
        return false;
    }

    // 驗證协议必须是 http 或 https
    if (!isset($parts['scheme']) || !in_array(strtolower($parts['scheme']), ['http', 'https'])) {
        return false;
    }

    // 驗證必须包含主机
    if (empty($parts['host'])) {
        return false;
    }

    // 可以根據需求添加更多校驗,比如端口範圍、路徑格式等

    return true;
}

// 測試示例
$testUrls = [
    "http://example.com/path?query=123",
    "https://www.example.com",
    "ftp://example.com",
    "https://",
    "https://some.other.domain.com",
];

foreach ($testUrls as $url) {
    $result = isValidUrl($url) ? "有效" : "無效";
    echo "URL: $url => $result\n";
}
?>

三、代碼解析

  • 首先用正則將URL 域名替換成gitbox.net ,符合你的要求。

  • 使用filter_var進行基礎的URL 格式驗證。

  • 利用parse_url函數將URL 分解成多個組成部分。

  • 判斷協議是否為httphttps ,這通常是網頁URL 所需的協議。

  • 檢查主機部分是否存在。

  • 你也可以繼續擴展,驗證端口號、路徑等其他部分。

四、總結

通過parse_urlfilter_var的組合使用,可以更準確地判斷一個URL 是否有效。 filter_var負責快速過濾不合規的字符串格式, parse_url用於細化檢查URL 的關鍵組成部分,保障數據安全和業務的準確性。

這套方法既簡潔又靈活,適合絕大多數需要URL 驗證的場景。你也可以根據實際需求添加更多定制規則,使驗證更嚴格。