Check if valid url so i can pass it to an NSURL?

tarnfeld picture tarnfeld · Mar 1, 2010 · Viewed 18.7k times · Source

I want to check if an NSString is a valid URL so I can parse it to an NSURL variable... is there an easy way to do this? :)

CRASH For some reason the app crashes when checking.....

NSURL *shortURL = [[NSURL alloc] initWithString:data];
if(shortURL == nil)
{
    NSLog(@"INVALID");
}
else {
    NSLog(@"COOOL");
}

The console gives me this error.....

* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[NSURL initWithString:relativeToURL:]: nil string parameter' 2010-03-01 19:24:14.797 Snippety[8289:5e3b] Stack: ( 8307803, 2419510843, 8391739, 8391578, 2898550, 3152497, 12262, 12183, 27646, 2662269, 2661144, 2454790485, 2454790162 )

Answer

Erik picture Erik · Aug 8, 2015

I'm using the below method to check whether NSString testString is a valid URL:

NSURL *testURL = [NSURL URLWithString:testString];
if (testURL && [testURL scheme] && [testURL host])
{
    NSLog(@"valid");
}
{
    NSLog(@"not valid");
}

scheme tests the prefix of the URL, e.g. http://, https:// or ftp://

host tests the domain of the URL, e.g. google.com or images.google.com

Note: This will still give you some false positives, e.g. when checking http://google,com (note the comma) will return valid but it's definitely more precise than just checking whether NSURL is not nil ([NSURL urlWithString:@"banana"] is not nil).