检查URL是否有http://前缀

时间:2010-09-24 16:35:58

标签: ios http url uiwebview hyperlink


在我的应用程序中,当用户添加对象时,也可以为该对象添加链接,然后可以在webView中打开链接。 我试图保存一个没有http://前缀的链接,然后在webView中打开但无法打开它! 在webView开始加载之前,有没有一种方法可以检查保存的URL是否有http://前缀?如果没有,请问如何在URL中添加前缀? 谢谢!

8 个答案:

答案 0 :(得分:42)

您可以在NSString上使用- (BOOL)hasPrefix:(NSString *)aString方法查看包含您的URL的NSString是否以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,无法编译/测试此代码,但我相信上述内容应该可行。

答案 1 :(得分:15)

NSString * urlString = ...;
NSURL * url = [NSURL URLWithString:urlString];
if (![[url scheme] length])
{
  url = [NSURL URLWithString:[@"http://" stringByAppendingString:urlString]];
}

答案 2 :(得分:4)

我在Swift中为String写了一个扩展,看看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 :(得分:3)

我不确定是否有任何方法可以检查,但你在代码中检查它。

尝试使用

NSRange range = [urlString rangeOfString:@"http://"];
if (range.location != NSNotFound)
    // Add http://  

答案 4 :(得分:2)

最好在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)
}

答案 5 :(得分:1)

如果您要检查“http://”,您可能需要不区分大小写的搜索:

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

虽然我认为网址方案检查是一个更好的答案,具体取决于您的具体情况,因为网址可以以http或https和其他前缀开头,具体取决于您的用例。

答案 6 :(得分:0)

首先,您应该为NSURL创建一个新类别:文件>新文件> Objective-C类别。您可以按类HTTPURLWithString调用类别,使其成为NSURL的类别,按next并将其添加到目标。然后在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];

答案 7 :(得分:0)

您可以使用scheme属性进行检查。例如......

if ([yourURL.scheme isEqualToString:@"http"] || [yourURL.scheme isEqualToString:@"https"]) {
    ...
}