C# 最佳URL验证

C# 最佳URL验证,c#,asp.net,uri,C#,Asp.net,Uri,im使用以下代码检查URL验证: public static bool CheckURLValid(string strURL) { Uri uriResult; return Uri.TryCreate(strURL, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp; } 下面的结果应该显示为true,但不知何故,它有自己的模式来验证url

im使用以下代码检查URL验证:

 public static bool CheckURLValid(string strURL)
  {
       Uri uriResult;
       return Uri.TryCreate(strURL, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp;
  }
下面的结果应该显示为true,但不知何故,它有自己的模式来验证url:

错误:google.com

正确

错误

正确

im使用c#,如何增强此检查url验证以更准确?

您可以尝试

var isUrl = Uri.IsWellFormedUriString(strURL, UriKind.RelativeOrAbsolute);

它在您在问题中编写的所有四个字符串上返回true

您的CheckURLValid正返回您告诉它的内容

要在所有4个URL上返回True,以下是问题

错误:google.com

这是一个相对url,您指定了UriKind.Absolute,这意味着这是错误的

错误:

这是一个httpS(安全)url,您的方法显示

&& uriResult.Scheme == Uri.UriSchemeHttp;
这将限制您仅使用http地址(不安全)

要获得您想要的结果,您需要使用以下方法:

public static bool CheckURLValid(string strURL)
{
    Uri uriResult;
    return Uri.TryCreate(strURL, UriKind.RelativeOrAbsolute, out uriResult);
}
另一种选择是只使用

Uri.IsWellFormedUriString(strURL, UriKind.RelativeOrAbsolute);
而不是重新实现所有就绪的功能。如果您想将其包装为您自己的CheckUrlValid,我将使用以下选项:

public static bool CheckURLValid(string strURL)
{
    return Uri.IsWellFormedUriString(strURL, UriKind.RelativeOrAbsolute); ;
}

主要的问题是大多数字符串都是有效的相对URL,所以我会避免使用UriKind.RelativeOrAbsolute,因为google.com是无效的URL。大多数web浏览器都会在字符串中添加HTTP://以使其成为有效的url
HTTP://google.com
是一个有效的url。

这是不使用Regex的最佳解决方案:

(请注意,例如,仅使用“IswellFormedUrString”将为“/”返回true)


对于单元测试,您可以检查where my function获得了很好的结果。

我通过编写一个使用Regex验证url的小助手方法来实现它

以下URL的通行证:

    public static bool ValidateUrl(string value, bool required, int minLength, int maxLength)
    {
        value = value.Trim();
        if (required == false && value == "") return true;
        if (required && value == "") return false;

        Regex pattern = new Regex(@"^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$");
        Match match = pattern.Match(value);
        if (match.Success == false) return false;
        return true;
    }
谷歌网站

www.google.com

在以下情况下失败:

    public static bool ValidateUrl(string value, bool required, int minLength, int maxLength)
    {
        value = value.Trim();
        if (required == false && value == "") return true;
        if (required && value == "") return false;

        Regex pattern = new Regex(@"^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$");
        Match match = pattern.Match(value);
        if (match.Success == false) return false;
        return true;
    }
www.google.com/a带有空白的错误路径/

下面是我创建的助手方法:

    public static bool ValidateUrl(string value, bool required, int minLength, int maxLength)
    {
        value = value.Trim();
        if (required == false && value == "") return true;
        if (required && value == "") return false;

        Regex pattern = new Regex(@"^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$");
        Match match = pattern.Match(value);
        if (match.Success == false) return false;
        return true;
    }

这允许用户输入任何有效的url,另外,它还可以用空格解释错误的url路径,这正是我所需要的。我希望这能帮助一些人

不确定我是否遗漏了一些内容,但这样其他人就不会在
Uri上浪费时间。IswellFormedUrString
,请注意以下测试失败:

[TestMethod]
public void TestURLValidation()
{
    bool result = Uri.IsWellFormedUriString("bad", UriKind.RelativeOrAbsolute);
    Assert.IsFalse(result);
}

即,规定的回答将“坏”视为有效地址。我相信这不是大多数用户所追求的行为。

为什么第三个应该是错误的?这是一个有效的URL,它确实有效。@SriramSakthivel我读了这个问题,因为它们都应该是真的,但显示的代码返回了上述结果,所以他们认为3也应该是有效的。是的,它应该返回真的,但不知怎的,我的函数将其返回为假:)对不起,我可怜的孩子english@DanielKelleyOops.误读了它。谢谢。你看过Uri.iswellFormedUrString了吗?看起来你只是在重新实现它。另外对于#3,它返回false,因为使用
和&uriResult.Scheme==Uri.UriSchemeHttp
。#3是httpSthx作为回答,我尝试了“iswellFormedUrString”“在我遇到'Uri.TryCreate'之前,它对我没有帮助,因为它返回的结果为true,即使它显然不是一个有效的url。你可以尝试输入任何字符串并查看结果,例如:ahskdjfh问题是“google”(或仅由英文字母组成的任何其他字符串)和“google.com”是同样有效的URL。它们都作为相对URL有效,但不是绝对URL。还有其他问题。例如,使用???将返回true。(当使用UriKind.RelativeOrAbsolute或UriKind.RelativeOrAbsolute时)感谢您的回答,我坚持使用绝对。这是我的最后一个代码:return Uri.TryCreate(strURL,UriKind.Absolute,out-uriResult);我做了一些控制,以确保用户输入“http/https”才能继续。System.Uri只能识别长度不超过263个字符的URL。标准规定,任何长度不超过2000个字符的URL都应该支持www.google