Проверьте, имеет ли URL префикс http: // - PullRequest
16 голосов
/ 24 сентября 2010


В моем приложении, когда пользователь добавляет объект, также можно добавить ссылку для этого объекта, а затем ссылку можно открыть в веб-представлении.
Я пытался сохранить ссылку без http: //префикс, затем откройте его в webView, но он не может его открыть!
Перед началом загрузки webView, есть ли способ проверить, имеет ли сохраненный URL-адрес префикс http: //?И если у него его нет, как я могу добавить префикс к URL?
Спасибо!

Ответы [ 8 ]

42 голосов
/ 24 сентября 2010

Вы можете использовать метод - (BOOL)hasPrefix:(NSString *)aString на NSString, чтобы увидеть, начинается ли строка NSString, содержащая ваш URL, с префикса http: //, а если нет, добавить префикс.

NSString *myURLString = @"www.google.com";
NSURL *myURL;
if ([myURLString.lowercaseString hasPrefix:@"http://"]) {
    myURL = [NSURL URLWithString:myURLString];
} else {
    myURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@",myURLString]];
}

Я в настоящее времяподальше от моего Mac и не могу скомпилировать / протестировать этот код, но я считаю, что вышесказанное должно работать.

16 голосов
/ 25 сентября 2010
NSString * urlString = ...;
NSURL * url = [NSURL URLWithString:urlString];
if (![[url scheme] length])
{
  url = [NSURL URLWithString:[@"http://" stringByAppendingString:urlString]];
}
4 голосов
/ 26 июня 2016

Я написал расширение для String в Swift, чтобы увидеть, получена ли строка URL-адреса http или https

extension String{

    func isValidForUrl()->Bool{

        if(self.hasPrefix("http") || self.hasPrefix("https")){
            return true
        }
        return false
    }
}

if(urlString.isValidForUrl())
    {
      //Do the thing here.
}
3 голосов
/ 17 февраля 2018

Лучше использовать свойство scheme для объекта URL:

extension URL {
    var isHTTPScheme: Bool {
        return scheme?.contains("http") == true // or hasPrefix
    }
}

Пример использования:

let myURL = https://stackoverflow.com/a/48835119/1032372
if myURL.isHTTPScheme {
    // handle, e.g. open in-app browser:            
    present(SFSafariViewController(url: url), animated: true)
} else if UIApplication.shared.canOpenURL(myURL) {
    UIApplication.shared.openURL(myURL)
}
3 голосов
/ 24 сентября 2010

Я не уверен, есть ли способ проверить это, но вы проверяете это в коде.

попробуйте использовать

NSRange range = [urlString rangeOfString:@"http://"];
if (range.location != NSNotFound)
    // Add http://  
1 голос
/ 16 августа 2013

Если вы проверяете «http://"», вам, вероятно, понадобится поиск без учета регистра:

// probably better to check for just http instead of http://
NSRange prefixRange = 
    [temp rangeOfString:@"http" 
                options:(NSAnchoredSearch | NSCaseInsensitiveSearch)];
if (prefixRange.location == NSNotFound)

Хотя я думаю, что проверка схемы URL-адреса является лучшим ответом в зависимости от ваших обстоятельств, поскольку URL-адресаможет начинаться с http или https и других префиксов в зависимости от вашего варианта использования.

0 голосов
/ 05 апреля 2018

Вы можете использовать свойство схемы для проверки.Например ...

if ([yourURL.scheme isEqualToString:@"http"] || [yourURL.scheme isEqualToString:@"https"]) {
    ...
} 
0 голосов
/ 22 августа 2013

Во-первых, вы должны создать новую категорию для NSURL: Файл> Новый файл> Категория Objective-C. Вы можете назвать категорию как-нибудь по аналогии с HTTPURLWithString, сделать ее категорией NSURL, нажать «Далее» и добавить ее к своей цели. Затем в NSURL + HTTPURLFromString.m реализовать следующее сообщение (и объявить сообщение в вашем .h)

@implementation NSURL (HTTPURLFromString)
+(NSURL *)HTTPURLFromString:(NSString *)string
{
    NSString *searchString = @"http";
    NSRange prefixRange = [string rangeOfString:searchString options:(NSCaseInsensitiveSearch | NSAnchoredSearch)];

    if (prefixRange.length == 4) {
        return [NSURL URLWithString:string];
    }
    return [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", string]];

}
@end

Чтобы открыть ссылку в WebView просто

NSString *urlString = @"www.google.com";
NSURL *url = [NSURL HTTPURLFromString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView.mainFrame loadRequest:request];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...