iis 失败子域的RegEx

lkaoscv7  于 2022-11-12  发布在  其他
关注(0)|答案(2)|浏览(157)

基本上,我想检查一个有效的网址,它没有子域。我似乎不能找出正确的正则表达式。
“应该”匹配的URL示例:

  • example.com
  • www.example.com
  • example.co.uk
  • example.com/page
  • example.com?key=value

“不应匹配”的URL示例:

  • test.example.com
  • sub.test.example.com
ngynwnxp

ngynwnxp1#

在这里,我们将从一个右边有.com.co.uk以及其他字符的表达式开始,如果需要的话,然后我们将向左滑动以收集所有非点字符,添加可选的wwwhttps,然后我们将添加一个开始字符^,这将使所有子域失败:

^(https?:\/\/)?(www\.)?([^.]+)(\.com|\.co\.uk)(.+|)$

可以将其他TLD添加到此捕获组:

(\.com|\.co\.uk|\.net|\.org|\.business|\.edu|\.careers|\.coffee|\.college)

并且表达式可以修改为:

^(https?:\/\/)?(www\.)?([^.]+)(\.com|\.co\.uk|\.net|\.org|\.business|\.edu|\.careers|\.coffee|\.college)(.+|)$

弹性

我想不出有什么方法可以让TLD变得过于灵活,因为这是一个验证表达式。例如,如果我们将其简化为:

^(https?:\/\/)?(www\.)?([^.]+)(\.[a-z]+)(\.uk?)?[a-z?=\/]+$

它可能适用于问题中列出的URL,但也会通过:

example.example

这是无效的。我们只能使用以下表达式:

^(https?:\/\/)?(www\.)?([^.]+)(\.[a-z]+)(\.uk?)?[a-z?=\/]+$

如果我们知道我们传递的内容,它已经是一个URL。

NOT FUNCTIONAL DEMO(第一个字母)

演示版
下面的代码片段显示了捕获组的工作方式:

const regex = /^(https?:\/\/)?(www\.)?([^.]+)(\.com|\.co\.uk)(.+|)$/gm;
const str = `example.com
www.example.com
example.co.uk
example.com/page
example.com?key=value

test.example.com
sub.test.example.com`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }

    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

RegEx电路

jex.im 将正则表达式可视化:

正则表达式

如果不需要此表达式,可以在regex101.com中修改/更改它。

DEMO(第一个字母)
6ie5vjzr

6ie5vjzr2#

试试这个:
为了更好地处理/PATH示例,我做了一些调整

^(?<OptionalEmail>.*@)?(?<OptionalProtocol>http[s]?:\/\/)?(?:(?<ThirdLevelSubDomain>[\w-]{2,63})\.){0,127}?(?<DomainWithTLD>(?<Domain>[\w-]{2,63})\.(?<TopLevelDomain>[\w-]{2,63}?)(?:\.(?<CountryCode>[a-z]{2}))?)(?:[\/](?<Path>\w+))*(?<QString>(?<QueryStringSeparatorOrExtraJunk>[?&,])(?<QueryStringParams>\w+=\w+))*$

相关问题