12

我想检查 anNSString是否是一个有效的 URL,以便我可以将它解析为一个NSURL变量......有没有简单的方法可以做到这一点?:)

崩溃 由于某种原因,应用程序在检查时崩溃.....

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

控制台给了我这个错误.....

* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -[NSURL initWithString:relativeToURL:]:nil 字符串参数”2010-03-01 19:24:14.797 Snippety[8289:5e3b] 堆栈:(8307803、2419510843 , 8391739, 8391578, 2898550, 3152497, 12262, 12183, 27646, 2662269, 2661144, 2454790485, 2454790162)

4

3 回答 3

17

我正在使用下面的方法来检查 NSString testString 是否是一个有效的 URL:

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

scheme测试 URL 的前缀,例如 http://、https:// 或 ftp://

host测试 URL 的域,例如 google.com 或 images.google.com

注意:这仍然会给你一些误报,例如当检查http://google,com(注意逗号)将返回有效但它肯定比检查 NSURL 是否不是 nil([NSURL urlWithString:@"banana"]不是 nil)更精确。

于 2015-08-08T12:59:47.250 回答
11

编辑:以下答案不正确。(苹果文档:https ://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/index.html )


NSURL如果传递的URL 无效,则URLWithString返回。nil因此,您只需检查返回值即可确定 URL 是否有效。

例子:

NSURL *url = [NSURL URLWithString:urlString];
if(url){ NSLog("valid"); }
于 2010-03-01T19:12:47.313 回答
2

这基本上就是该+[NSURLConnection canHandleRequest:]方法的作用。此方法针对 an 运行预检检查NSURLRequest以确保请求是可解析的。要快速检查特定 URL,您可以执行以下操作:

BOOL isValidURL = [NSURLConnection canHandleRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://example.com"]];
于 2019-10-21T20:46:55.017 回答