当前位置: 首页> 最新文章列表> 搭配 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 验证的场景。你也可以根据实际需求添加更多定制规则,使验证更严格。