regex 用于URL标签替换的正则表达式

jjhzyzn0  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(112)

我想知道一种方法来创建一个正则表达式来验证一个URL,但在中间我可以有一个Tag来替换,像这样:

  • http://localhost/path1/path2/{SubstitutionTag}/path3/path4/etc

然后我需要一个例外对我的验证,除了这个标签,目前我有这个正则表达式:

  • ^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$

此外,我还需要太除了我的网址上的“localhost”一词。
有什么建议吗?

ohfgkhjo

ohfgkhjo1#

我放弃了只使用Regex来验证URL的想法,因为我的项目是在C#中,我使用了RegexURI的“混合”来验证URL,结果我得到了以下代码:

private bool IsValidURL(string url)
{
    var validationPathCounter = 0;
    var tags = Regex.Matches(url, @"\{(.*?)\}")
        .OfType<Match>()
        .Select(x => x.Value)
        .Distinct()
        .ToArray();

    foreach (var tag in tags)
        url = url.Replace(tag, $"validationPath{++validationPathCounter}");

    if (!Uri.IsWellFormedUriString(url, UriKind.Absolute))
        return false;

    if (Uri.TryCreate(url, UriKind.Absolute, out Uri tmp))
        return tmp.Scheme == Uri.UriSchemeHttp || tmp.Scheme == Uri.UriSchemeHttps;
    else
        return false;
}

在上面的源代码中,Regex仅用于获取斜杠/之间的路径,使用它们,我可以用有效的路径替换它们,以便继续进行验证。
另一方面,URI用于实际验证URL,使用IsWellFormedUriStringTryCreate方法,其中IsWellFormedUriString是实际验证URL的人,而TryCreate用于验证验证的URI是在HTTP还是在HTTPs中。
对于我的场景,只允许这些类型的URL,但是如果不需要这种类型的验证,那么IsWellFormedUriString方法就足够了,因为它在内部已经使用了TryCreate
上面的源代码非常适合我,因为它允许我用它们路径的通用部分来验证URL,以便将来替换,并确保URL的其余部分符合基于HTTPHTTPS的URL的标准。

相关问题