最佳URL验证

时间:2015-01-20 15:41:58

标签: c# asp.net uri

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

 public static bool CheckURLValid(string strURL)
  {
       Uri uriResult;
       return Uri.TryCreate(strURL, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp;
  }

下面的结果应该全部显示为 true ,但不知何故,它有自己的模式来验证网址:

false :google.com

true http://www.google.com

false https://www.google.com.my/webhp?sourceid=chrome-instant&ion=1&espv=2&es_th=1&ie=UTF-8#newwindow=1&q=check%20if%20valid%20url%20c%23

true https://stackoverflow.com/questions/ask

即时通讯使用c#,如何增强此检查网址验证更准确?

5 个答案:

答案 0 :(得分:15)

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

要在所有4个网址上返回True,这是问题

false:google.com

这是一个相对网址,你指定了UriKind.Absolute,这意味着这是假的。

false:https://www.google.com.my/webhp?sourceid=chrome-instant&ion=1&espv=2&es_th=1&ie=UTF-8#newwindow=1&q=check%20if%20valid%20url%20c%23

这是一个httpS(安全)网址,您的方法说

&& 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是一个无效的网址。大多数Web浏览器以静默方式将HTTP://添加到字符串中,以使其成为有效的URL。 HTTP://google.com是有效的网址。

答案 1 :(得分:3)

你可以尝试

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

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

答案 2 :(得分:3)

不确定我是否在这里遗漏了一些东西,只是为了确保其他人不会浪费时间CompanyId,请注意以下测试失败:

Uri.IsWellFormedUriString

即,规定的答案将认为“错误”是有效地址。我相信这不是大多数用户追求的行为。

答案 3 :(得分:1)

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

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

    public static bool IsValidUrl(string url)
    {
        if (url == null)
        {
            return false;
        }

        try
        {
            Uri uriResult = new Uri(url);
            return Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute);
        }
        catch
        {
            return false;
        }
    }

对于单元测试,您可以查看link我的功能得到了不错的结果。

答案 4 :(得分:0)

我通过编写一个使用Regex来验证URL的小型辅助方法来使其工作。

以下URL的通行证:

google.com

www.google.com

http://google.com

http://www.google.com

https://google.com/test/test

https://www.google.com/test

此操作失败:

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;
    }

这允许用户输入任何有效的url,并且它用纯白的空格解决了错误的url路径,这正是我所需要的。希望对您有所帮助