检测路径之间的URL

时间:2012-01-05 06:58:41

标签: objective-c nsurl

如何检测它是Web URL还是路径?

在NSUrl Apple编写的参考页面中,它接受一个URL,如果它是基于标准的,但它接受的任何类型的字符串都是URL,如下代码:

NSURL *url=[NSURL URLWithString:@"/book.xml"];

    NSLog(@"%@",url);

这不是一个网址,但是它会保留它并将其作为其值返回。 我已经尝试过这个功能,它可以工作但不是所有的URL!

-(BOOL) urlIsValiad: (NSString *) url {

    NSString *regex = @"((?:http|https)://(?:www\\.)?[\\w\\d\\-_]+\\.\\w{2,3}/?(?:[\\w\\d\\-./_]+)?)";

    NSPredicate *regextest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

    if ([regextest evaluateWithObject: url] == YES) {
        NSLog(@"It is a valid URL!");
    } else {
        NSLog(@"It is not valid URL!");
    }


    return [regextest evaluateWithObject:url];

}

我担心的是检测其他路径中的网址!

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

NSDataDetector

怎么样?
NSString *string = @"This is a sample of a http://abc.com/efg.php?EFAei687e3EsA sentence with a URL within it.";
NSDataDetector *linkDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil];
NSArray *matches = [linkDetector matchesInString:string options:0 range:NSMakeRange(0, [string length])];

for (NSTextCheckingResult *match in matches)
{
  if ([match resultType] == NSTextCheckingTypeLink) 
  {
    NSURL *url = [match URL];
    NSLog(@"found URL: %@", url);
  }
}

这样您就不必依赖不可靠的正则表达式,并且当Apple升级其链接检测代码时,您可以免费获得这些改进。