web-dev-qa-db-ja.com

URLにhttp://プレフィックスが付いているかどうかを確認します


私のアプリケーションでは、ユーザーがオブジェクトを追加すると、このオブジェクトへのリンクを追加することもでき、そのリンクをwebViewで開くことができます。
http://プレフィックスなしでリンクを保存してから、webViewで開こうとしましたが、開くことができません。
webViewの読み込みを開始する前に、保存されたURLにhttp://プレフィックスが付いているかどうかを確認する方法はありますか?まだ取得していない場合、URLにプレフィックスを追加するにはどうすればよいですか?
ありがとう!

16
matteodv

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から離れており、このコードをコンパイル/テストできませんが、上記は機能するはずです。

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

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.
}
4
anoop4real

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
shim

それをチェックする方法があるかどうかはわかりませんが、コードでチェックします。

使ってみてください

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

「http://」をチェックしている場合は、大文字と小文字を区別しない検索が必要になる可能性があります。

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

URLは、ユースケースに応じてhttpまたはhttpsやその他のプレフィックスで始まる可能性があるため、状況によってはURLスキームチェックの方が適していると思います。

1
bobics

まず、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];
0
JuJoDi

スキームプロパティを使用してチェックアウトできます。例えば...

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