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

Ios 检查URL是否具有http://前缀,ios,http,url,uiwebview,hyperlink,Ios,Http,Url,Uiwebview,Hyperlink,在我的应用程序中,当用户添加一个对象时,还可以为该对象添加一个链接,然后可以在webView中打开该链接。 我试图保存一个没有http://prefix的链接,然后在webView中打开它,但无法打开它 在webView开始加载之前,是否有方法检查保存的URL是否具有http://前缀?如果没有,我如何将前缀添加到URL? 谢谢 我不确定是否有任何方法可以检查,但您可以在代码中检查它 试用 NSRange range = [urlString rangeOfString:@"http://"];


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

谢谢

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

试用

NSRange range = [urlString rangeOfString:@"http://"];
if (range.location != NSNotFound)
    // Add http://  
您可以在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电脑上,无法编译/测试此代码,但我相信上面的方法应该可以工作。

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

NSString * urlString = ...;
NSURL * url = [NSURL URLWithString:urlString];
if (![[url scheme] length])
{
  url = [NSURL URLWithString:[@"http://" stringByAppendingString:urlString]];
}
// 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开头,也可以根据您的用例使用其他前缀。

首先,您应该为NSURL创建一个新类别:File>new File>Objective-C category。您可以按照HTTPURLWithString的方式调用该类别,将其设置为NSURL类别,然后按next并将其添加到目标中。然后在NSURL+HTTPURLFromString.m中实现以下消息(并在.h中声明该消息)

在WebView中打开链接非常简单

NSString *urlString = @"www.google.com";
NSURL *url = [NSURL HTTPURLFromString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView.mainFrame loadRequest:request];

我在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.
}

最好在
URL
对象上使用
scheme
属性:

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

let myURL = URL(string: "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)
}

您可以使用scheme属性进行签出。例如

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

此测试以“”中断。它也不支持ftp://,即使UIWebView支持。我认为我的回答提供了足够的信息,Matthew可以解决他的问题。是的Greg,这就是我要找的。。。我将只支持http协议,因为它是唯一可以在我的应用程序中提供服务的协议…;)要检查不区分大小写的前缀,请使用以下方法:这可能是一个解决方案,但此方法会将http://添加到URL。。。如果URL有http://这个方法是什么?这段代码在没有方案的情况下向所有URL添加“http://”。“”的方案为“http”,因此
[[url scheme]length]
为非零,并且代码保持url不变。
if ([yourURL.scheme isEqualToString:@"http"] || [yourURL.scheme isEqualToString:@"https"]) {
    ...
}