【问题标题】:How to determine if a string is a URL in Objective-CObjective-C中如何判断一个字符串是否是一个URL
【发布时间】:2010-09-28 10:57:02
【问题描述】:

我是 iPhone 开发和 Objective-C 的新手。使用 ZBar SDK,我开发了一个基本的应用程序,它可以扫描相册中的 QR 图像并输出它翻译成的内容。

我想知道是否有办法获取此输出,确定它是否是 URL,如果是,则在网络浏览器中打开它。

【问题讨论】:

    标签: iphone objective-c xcode


    【解决方案1】:

    如果传递的 URL 无效,NSURL 的 URLWithString 将返回 nil。因此,您只需检查返回值即可确定 URL 是否有效。

    更新

    仅仅使用URLWithString:通常是不够的,你可能还想检查url是否有scheme和host,否则al:/dsfhkgdsk等url会通过测试。

    所以你可能想做这样的事情:

    NSURL *url = [NSURL URLWithString:yourUrlString];
    if (url && url.scheme && url.host)
    {
       //the url looks ok, do something with it
       NSLog(@"%@ is a valid URL", yourUrlString);
    }
    

    如果您只想接受 http 网址,您可能需要添加 [url.scheme isEqualToString:@"http"]

    【讨论】:

    • 感谢您为我指明了正确的方向 :) 现在搞定了,不过需要更多地练习 Objective C!哈哈
    • 它似乎有一个松散的定义,什么是有效的 URL。 "foo.com" 将解析,因此您可能想要检查生成的对象是否具有方案属性。
    • 你不能只信任 URLWithString,因为 NSURL *url = [NSURL URLWithString:@"a"];会回一个给你。见stackoverflow.com/questions/1471201/…
    • 但是,如果你想使用正则表达式,你可以使用this
    • 我的意思是“你可以只检查返回值来确定 URL 是否有效。”声明是不够的。
    【解决方案2】:

    这是我遇到的另一种解决方案。你可以这样做。

    NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"yourstring"]];
    bool valid = [NSURLConnection canHandleRequest:req];
    

    来源:https://stackoverflow.com/a/13650542/2513947

    【讨论】:

      【解决方案3】:

      您可以查看以下代码来检查字符串是否包含网站 url 或简单文本。

       NSString *getString =[[NSUserDefaults standardUserDefaults]valueForKey:@"searchKey"];
          if([getString rangeOfString:@"Www"].location == NSNotFound
             && [getString rangeOfString:@"www"].location == NSNotFound && [getString rangeOfString:@"com"].location == NSNotFound)
          {
              [companyNameTF setText:[[NSUserDefaults standardUserDefaults]valueForKey:@"searchKey"]];
          }
          else
          {
               [websiteTF setText:[[NSUserDefaults standardUserDefaults]valueForKey:@"searchKey"]];
          }
      

      【讨论】:

      • 这在非常有限的情况下有效。 IE。只有包含wwwcom 的网址,这绝不是全部。仅当您知道 URL 的外观时,它才有效。
      猜你喜欢
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 2011-05-31
      • 2012-01-02
      • 2013-03-11
      • 2011-02-05
      相关资源
      最近更新 更多