best URL validation best URL validation asp.net asp.net

best URL validation


Your CheckURLValid is returning exactly what you have told it to.

To return True on all 4 URLs here are the issues

false: google.com

This is a relative url and you have specified UriKind.Absolute which means this is false.

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

This is an httpS (Secure) url and your method says

&& uriResult.Scheme == Uri.UriSchemeHttp;

which will limit you to only http addresses (NON secure)

To get the results you are wanting you will need to use the following method:

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

An alternative is to just use

Uri.IsWellFormedUriString(strURL, UriKind.RelativeOrAbsolute);

and not re implement functionality that all ready exists. If you wanted to wrap it it your own CheckUrlValid I would use the following:

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

The main problem is that most strings are valid relative URL's so I would avoid using UriKind.RelativeOrAbsolute as google.com is an invalid url. Most web browsers silently add HTTP:// to the string to make it a valid url. HTTP://google.com is a valid url.


You can try

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

It returns true on all four strings you wrote in your question.


Not sure if I'm missing something here, but just so others don't waste their time with Uri.IsWellFormedUriString, note that the following test fails:

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

I.e., the prescribed answer will consider "bad" as a valid address. I believe that's not the behavior most users are after.