用于默认 URL 验证的正则表达式,还包括对子域和顶级域使用通配符 [已关闭]

问题描述 投票:0回答:1

是否可以修改当前的 php 正则表达式以允许

'*example.*'

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

// Test URLs
$urls = [
    'example.*',      // Domain with wildcard TLD
    '*example.com',   // Wildcard domain with fixed TLD
    '*.example.*',    // Wildcard subdomain with wildcard TLD
    '*.example.com',  // Wildcard subdomain with fixed TLD
    '*example.*',     // Wildcard domain with wildcard TLD
    'http://example.*', // Protocol with domain and wildcard TLD
    'http://*example.com' // Protocol with wildcard domain and fixed TLD
];

foreach ($urls as $url) {
    if (preg_match($wildcardUrlPattern, $url)) {
        echo "$url: Valid URL with wildcard\n";
    } else {
        echo "$url: Invalid URL\n";
    }
}

结果:

example.*: Valid URL with wildcard
*example.com: Valid URL with wildcard
*.example.*: Valid URL with wildcard
*.example.com: Valid URL with wildcard
*example.*: Invalid URL (should also be valid)
http://example.*: Valid URL with wildcard
http://*example.com: Valid URL with wildcard
php regex
1个回答
0
投票

这个怎么样?

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

解释如下:

  • ^
    — 字符串的开头
  • (?=.+\..+)
    — 前瞻
    (?=   )
    以确保字符串至少包含一个点
    \.
    且其两侧各有一个字符
    .+
  • (?:https?:\/\/)?
    — 可选方案(未捕获)
  • [a-z0-9-\.*]+
    — 一系列不间断的字母数字字符、连字符、点或星号
  • $
    — 字符串结尾

看到它在 regex101 上工作,尽管请注意 用于测试目的我已经包含了

/m
标志,以便
^
$
匹配每行的开头和结尾(而不是字符串)和
/g
标志,以便在找到第一个匹配项后不会停止。我包含了第二组测试用例,我认为它们应该匹配。

© www.soinside.com 2019 - 2024. All rights reserved.