You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP正则验证URL区分域名首页与内页完整路径问题求助

现有代码存在的问题
  • 正则仅匹配纯域名字符串,没有兼容http://、https://协议前缀,也没有处理域名末尾的/字符,导致带协议或者末尾带斜杠的域名被错误判定为全路径URL
  • 输出语句存在语法错误:echo "$urls is domain";中$urls是存储所有URL的数组,直接输出会报数组转字符串的警告,应该使用循环变量$url
  • 没有判断URL是否包含路径、查询参数部分,无法准确区分纯首页域名和带资源路径的内页URL
修复方案

修复思路:先对每个URL做预处理,移除协议前缀,再通过解析URL判断是否存在非根路径、查询参数,匹配规则完全对齐预期输出。

$urls = [
    "http://example.com",
    "https://www.example.net",
    "http://example.com/page.html?a=123",
    "http://example.com/page?a=123",
    "http://example.com/",
    "https://example.net/",
    "example.com",
    "demo.example.net"
];
// 原域名校验正则保留
$domainPattern = '/^(?!\-)(?:(?:[a-zA-Z\d][a-zA-Z\d\-]{0,61})?[a-zA-Z\d]\.){1,126}(?!\d+)[a-zA-Z\d]{1,63}$/';
foreach ($urls as $url) {
    // 移除协议前缀后提取主机部分
    $processedUrl = preg_replace('#^https?://#', '', $url);
    $host = rtrim(explode('/', $processedUrl, 2)[0], '/');
    // 解析URL的路径和查询参数
    $path = parse_url($url, PHP_URL_PATH);
    $query = parse_url($url, PHP_URL_QUERY);
    
    if (preg_match($domainPattern, $host) && (empty($path) || $path === '/') && empty($query)) {
        echo "{$url} (domain)" . PHP_EOL;
    } else {
        echo "{$url} (full URL)" . PHP_EOL;
    }
}

运行上述代码即可得到你给出的预期输出结果。

内容的提问来源于stack exchange,提问作者Brajman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:45:05