2017-02-17 28 views
0

Я делаю веб-браузер, который работает как любой другой веб-браузер.Как проверить, является ли строка поиском Google или URL-адресом?

  • Если вы наберете текст свободной формы: "vasdfygvaosfh", он выполнит поиск в Google.

  • Если вы наберете текст, который имеет структуру URL-адреса: «abc.com», он откроет новую страницу.

Каков наилучший подход для решения этой проблемы? Должен ли я просто иметь пару утверждений if о том, есть ли точка? ». настоящее или нет?

+0

Смотреть это [ссылка] (http://stackoverflow.com/questions/28079123/how-to-check-validity-of-url-in-swift) в основном по тому же вопросу – Florensvb

ответ

0

Я использую этот код (категория, на NSString), чтобы проверить, если строка является допустимым URL:

- (BOOL) isValidURLString 
{ 
    BOOL result = NO; 

    if (!self.length) 
     return result; 

    NSError *error = NULL; 
    NSDataDetector *urlDetector = [NSDataDetector dataDetectorWithTypes: NSTextCheckingTypeLink error: &error]; 
    NSUInteger numberOfMatches = [urlDetector numberOfMatchesInString: self 
                   options: 0 
                   range: NSMakeRange(0, self.length)]; 

    if (!error && numberOfMatches > 0) 
     result = YES; 

    return result; 
} 
+0

Вам все равно придется преобразовать его в NSURL, и если вся строка не является URL-адресом, это вернет true, но преобразование завершится неудачно. Имеет смысл просто посмотреть, возвращает ли [NSURL URLWithString: string] значение nil. Если это так, относитесь к нему как к поиску, иначе относитесь к нему как к URL-адресу. – dgatwood

0

Вы можете попробовать regex как в:

- (BOOL)isValidURL:(NSString *)candidate{ 

    NSString *urlRegEx = @"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+"; 

    NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 

    return [urlTest evaluateWithObject:candidate]; 
}