2012-01-05 86 views
0

如何檢測它是Web URL還是路徑?檢測路徑中的URL

在NSURL蘋果參考頁面已經寫的,它接受一個URL,如果它是基於標準的,但任何一種字符串,它接受一個URL,這樣的代碼:

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

    NSLog(@"%@",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]; 

} 

我擔心的是檢測其他路徑中的URL!

回答

0
+0

我編輯了我的帖子,我用了一些類似的東西,但即使它有一些例外情況不起作用。 – user1095058 2012-01-05 07:24:18

+0

你確定NSDataDetector不起作用嗎?我可能誤解了,但NSDataDetector應該能夠在一個長字符串中找到多個URL。 – 2012-01-05 07:30:14

+0

不幸的是我不能使用它!因爲我打算提供一個適用於OSX版本10.5的應用程序! – user1095058 2012-01-05 14:54:21

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); 
    } 
} 

這樣你就不必依賴不可靠的正則表達式,如蘋果升級他們的鏈接檢測代碼,你可以免費獲得這些改進。

+0

不幸的是我不能使用它!因爲我打算提供一個從10.5開始的應用程序! – user1095058 2012-01-05 07:50:52

+0

啊,對不起,沒有意識到! – 2012-01-05 21:06:14