最佳URLvalidation

我使用下面的代码来检查URLvalidation:

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

下面的结果应该显示为true ,但不知何故它有自己的模式来validationurl:

false :google.com

是的 : 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

是的 : https : //stackoverflow.com/questions/ask

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

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

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

false:google.com

这是一个相对URL,你已经指定了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(安全)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); 

而不是重新实现所有准备就绪的function。 如果你想把它包装成你自己的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。

你可以试试

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

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

这是不使用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; } } 

对于unit testing,您可以检查我的function获得良好结果的链接 。