是否可以修改当前的 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
这个怎么样?
/^(?=.+\..+)(?:https?:\/\/)?[a-z0-9-\.*]+$/i
解释如下:
^
— 字符串的开头(?=.+\..+)
— 前瞻 (?= )
以确保字符串至少包含一个点 \.
且其两侧各有一个字符 .+
(?:https?:\/\/)?
— 可选方案(未捕获)[a-z0-9-\.*]+
— 一系列不间断的字母数字字符、连字符、点或星号$
— 字符串结尾看到它在 regex101 上工作,尽管请注意 用于测试目的我已经包含了
/m
标志,以便 ^
和 $
匹配每行的开头和结尾(而不是字符串)和 /g
标志,以便在找到第一个匹配项后不会停止。我包含了第二组测试用例,我认为它们应该不匹配。