如何验证URL?

Gab*_*ues 5 swift

我正在尝试使用NSURL验证网址,但它对我不起作用.

例:

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
Run Code Online (Sandbox Code Playgroud)

我认为"Escolas"不能回归真实,我做错了什么?

Vic*_*ler 9

我认为您缺少的是打开网址,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
}
Run Code Online (Sandbox Code Playgroud)
verifyUrl("escola") // false
verifyUrl("http://wwww.google.com") // true
Run Code Online (Sandbox Code Playgroud)

NSURL根据Apple的说法,构建者没有按照你的想法验证网址:

此方法期望URLString仅包含正确形成的URL中允许的字符.所有其他字符必须正确转义百分比.使用UTF-8编码解释任何百分比转义字符

我希望这对你有帮助.

  • 更简单的验证方法是使用`NSDataDetector`,因为我在评论http://stackoverflow.com/questions/9587458/using-nsregularexpression-to-extract-urls-on-the-iphone/29498086#中的答案中发布了29498086,请看 (2认同)