2012-01-05 9 views
0

Web URLかパスかどうかを検出するにはどうすればよいですか? NSURLアップルのリファレンスページでパス間のURLを検出する

が書かれている、それが標準に基づいている場合、それはURLを受け入れますが、文字列の任意の種類は、それがこのコードのように、URLとして受け入れる:

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

    NSLog(@"%@",url); 

これはウェブではありません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]; 

} 

他のパスの中でもURLが検出されています。

答えて

0
+0

私の投稿を編集しました。同様のものを使用しましたが、それでも機能しないいくつかの例外的なケースがあります。 – user1095058

+0

NSDataDetectorが機能しないのですか?私は間違っているかもしれませんが、NSDataDetectorは複数のURLを1つの長い文字列で見つけることができるはずです。 –

+0

残念ながら私はそれを使用することはできません!なぜなら私は10.5のOSXバージョンで動作するアプリケーションを提供しようとしているからです! – user1095058

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

+0

ああ、申し訳ありませんが、それを認識していませんでした! –

関連する問題