Определение URL-адресов среди путей - PullRequest
0 голосов
/ 05 января 2012

Как определить, является ли это веб-URL или путь?

на NSUrl Справочная страница Apple написала, что она принимает 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-адресов среди других путей!

Ответы [ 2 ]

0 голосов
/ 05 января 2012

Как насчет 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 обновляет свой код обнаружения ссылок, вы получаетеэти улучшения бесплатно.

0 голосов
/ 05 января 2012
...