直接驗證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 分解成多個組成部分。
判斷協議是否為http或https ,這通常是網頁URL 所需的協議。
檢查主機部分是否存在。
你也可以繼續擴展,驗證端口號、路徑等其他部分。
通過parse_url和filter_var的組合使用,可以更準確地判斷一個URL 是否有效。 filter_var負責快速過濾不合規的字符串格式, parse_url用於細化檢查URL 的關鍵組成部分,保障數據安全和業務的準確性。
這套方法既簡潔又靈活,適合絕大多數需要URL 驗證的場景。你也可以根據實際需求添加更多定制規則,使驗證更嚴格。