iOS - NSDataDetector:为什么url缺少'.com'(http:// google)作为有效网址返回?

时间:2014-11-13 20:53:14

标签: ios http nsurl nsdatadetector

我正在尝试使用NSDataDetector验证来自文本字段的提供的URL,如果我输入包含" http://"的URL,它总是返回有效的。在任何文本的前面。

i.e. http://someurl, http://someotherurl, etc.

仅供参考 - 虽然网络浏览器能够使用上述格式解释网址,但每次使用此格式时NSURL都会返回错误。由于我需要在我的应用中使用提供的URL调用操作,因此在从提供的URL文本创建NSURL时,它必须有效。

关于如何纠正这些网址的任何想法都不是真的有效吗?

这是我的代码:

   linkDetector = NSDataDetector(types: NSTextCheckingType.Link.rawValue, error: nil)
    linkDetector?.enumerateMatchesInString(self.textField.text, options: NSMatchingOptions(0), range: NSMakeRange(0, countElements(urlString!)), usingBlock: { (result: NSTextCheckingResult!, flags, stop) -> Void in
            self.validatedUrlString = self.textField.text
    })

2 个答案:

答案 0 :(得分:2)

根据RFC 1304 Section 3.5,有效的域名扩展(在http://协议说明符之后)可以如下:

<domain> ::= <subdomain> | " "
<subdomain> ::= <label> | <subdomain> "." <label>
<label> ::= <letter> [ [ <ldh-str> ] <let-dig> ]

基本上,这意味着.不是域名的要求。一个非常常见的例子是http://localhost,其中不包含.

答案 1 :(得分:0)

因为there are new top level domains like .google and .apple所以现在只包含“apple”的网址实际上可能是有效的网址。

事实上,如果我输入http://apple,这个看似简单的有效网址实际上已在Firefox中成功解析。