【问题标题】:How do I validate an URL?如何验证 URL?
【发布时间】:2016-05-05 02:39:10
【问题描述】:

我正在尝试使用 NSURL 验证 url,但它对我不起作用。

示例:

func verifyUrl (urlString: String?) -> Bool {
    if let urlString = urlString {
        if let _  = NSURL(string: urlString) {
            return true
        }
    }
    return false
}


let ex1 = "http://google.com"
let ex2 = "http://stackoverflow.com"
let ex3 = "Escolas" // Not a valid url, I think

verifyUrl(ex1) // true
verifyUrl(ex2) // true
verifyUrl(ex3) // true

我认为“Escolas”不能返回 true,我做错了什么?

【问题讨论】:

标签: swift


【解决方案1】:

我认为您缺少的是使用UIApplication.sharedApplication().canOpenURL(url) 打开网址,例如,将您的代码更改为这个:

func verifyUrl (urlString: String?) -> Bool {
   if let urlString = urlString {
       if let url  = NSURL(string: urlString) {
           return UIApplication.sharedApplication().canOpenURL(url)
       }
   }
   return false
}

verifyUrl("escola") // false
verifyUrl("http://wwww.google.com") // true

NSURL的构造函数并没有像你想的那样验证url,根据Apple

此方法要求 URLString 仅包含格式正确的 URL 中允许的字符。所有其他字符必须正确地进行百分比转义。任何百分比转义的字符都使用 UTF-8 编码进行解释

希望对你有所帮助。

【讨论】:

  • +1我只是改成这种方式并显示这条消息-canOpenURL: failed for URL: "Escolas" - error: "Invalid input URL"而不是只返回false
  • @GabrielRodrigues 编译器将您所说的输出到日志中,但如果您看到它,函数中的结果是错误的。
  • @GabrielRodrigues 请记住,有很多方法可以解决验证 URL 的问题,使用正则表达式,使用 NSDataDetector 等,您可以在我的回答 here 中看到更多信息,但正如您所问对于使用 NSUrl 我只是以这种方式发布它
  • 那么编译器告诉我这个消息没有问题?
  • 更简单的验证方法是使用NSDataDetector,正如我在评论stackoverflow.com/questions/9587458/… 中发布的答案,请查看
【解决方案2】:

[Swift 3.0]

非常相似,但我在 String 上使用了扩展来实现相同的结果。

extension String {

    func isValidURL() -> Bool {

        if let url = URL(string: self) {

            return UIApplication.shared.canOpenURL(url)
        }

    return false 
    }
}

【讨论】:

  • 在控制台中仍然会出现一些错误。对我来说没有多大意义,因为您正在解包并检查它是否是 URL 的一个实例:-canOpenURL: failed for URL: "dddddddddd" - error: "Invalid input URL"
猜你喜欢
  • 2015-05-31
  • 2014-05-11
  • 2014-01-06
  • 2014-08-14
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多