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

如何修改PHP通配符URL验证正则以支持*example.*格式?

解决PHP正则无法验证*example.*格式通配符URL的问题

问题背景

现有一段用于验证支持子域名和顶级域名通配符的PHP正则表达式,测试时发现*example.*格式无法通过验证,但其他类似格式(如example.*、*example.com)均可正常验证。

原正则与测试情况

原正则表达式

$wildcardUrlPattern = '/^(https?:\/\/)?(\*[a-z0-9-]*\.)?[a-z0-9-]+(\.[a-z0-9-]*)*(\.\*[a-z0-9-]*)?$/i';

测试代码

// 测试URL列表
$urls = [
    'example.*',      // 带通配符顶级域名的域名
    '*example.com',   // 带通配符域名主体+固定顶级域名
    '*.example.*',    // 带通配符子域名+通配符顶级域名
    '*.example.com',  // 带通配符子域名+固定顶级域名
    '*example.*',     // 带通配符域名主体+通配符顶级域名(原正则无法验证)
    'http://example.*', // 带协议+域名+通配符顶级域名
    'http://*example.com' // 带协议+通配符域名主体+固定顶级域名
];

foreach ($urls as $url) {
    if (preg_match($wildcardUrlPattern, $url)) {
        echo "$url: 有效的通配符URL\n";
    } else {
        echo "$url: 无效的URL\n";
    }
}

原测试结果

example.*: 有效的通配符URL
*example.com: 有效的通配符URL
*.example.*: 有效的通配符URL
*.example.com: 有效的通配符URL
*example.*: 无效的URL(应该验证通过)
http://example.*: 有效的通配符URL
http://*example.com: 有效的通配符URL

问题分析

原正则的核心问题在于:第二个分组(\*[a-z0-9-]*\.)?强制要求通配符*后必须紧跟一个点.,但*example.*中*后是域名主体example,没有点,导致该分组无法匹配;而后续的[a-z0-9-]+不允许以*开头,因此整个正则无法覆盖*example.*这种格式。

修改后的正则表达式

调整正则逻辑,允许域名主体直接以*开头,同时兼容原有所有合法格式:

$wildcardUrlPattern = '/^(https?:\/\/)?((\*[a-z0-9-]*\.)?[a-z0-9-]+|\*[a-z0-9-]+)(\.[a-z0-9-]*)*(\.\*[a-z0-9-]*)?$/i';

修改后测试结果

运行原测试代码,所有用例均可正常验证:

example.*: 有效的通配符URL
*example.com: 有效的通配符URL
*.example.*: 有效的通配符URL
*.example.com: 有效的通配符URL
*example.*: 有效的通配符URL
http://example.*: 有效的通配符URL
http://*example.com: 有效的通配符URL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 03:45:58