首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Swift中检查URL的有效性?

如何在Swift中检查URL的有效性?
EN

Stack Overflow用户
提问于 2015-01-21 23:57:44
回答 22查看 106.5K关注 0票数 94

尝试让一个应用程序启动默认浏览器到一个URL,但只有当输入的URL是有效的,否则它会显示一条消息,说URL是无效的。

如何使用Swift检查有效性?

EN

回答 22

Stack Overflow用户

回答已采纳

发布于 2015-05-08 18:27:59

如果您的目标是验证您的应用程序是否可以打开URL,下面是您可以做的事情。虽然safari可以打开URL,但该网站可能不存在或可能被关闭。

代码语言:javascript
运行
复制
// Swift 5
func verifyUrl (urlString: String?) -> Bool {
    if let urlString = urlString {
        if let url = NSURL(string: urlString) {
            return UIApplication.shared.canOpenURL(url as URL)
        }
    }
    return false
}

附带说明,这会使而不是检查一个URL是否有效或是否完整。例如,传递"https://“”的调用返回true。

票数 144
EN

Stack Overflow用户

发布于 2018-03-02 15:54:45

使用Swift 4优雅解决方案

代码语言:javascript
运行
复制
extension String {
    var isValidURL: Bool {
        let detector = try! NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)
        if let match = detector.firstMatch(in: self, options: [], range: NSRange(location: 0, length: self.utf16.count)) {
            // it is a link, if the match covers the whole string
            return match.range.length == self.utf16.count
        } else {
            return false
        }
    }
}

用法:

代码语言:javascript
运行
复制
let string = "https://www.fs.blog/2017/02/naval-ravikant-reading-decision-making/"
if string.isValidURL {
    // TODO
}

使用NSDataDetector而不是UIApplication.shared.canOpenURL进行推理

我需要一个方法来检测用户是否提供了一个输入,这个输入是某个东西的URL。在许多情况下,用户在输入的URL中不包括http://https:// URL方案--例如,他们将输入"www.google.com"代替"http://www.google.com"。如果没有URL方案,UIApplication.shared.canOpenURL将无法识别该URL并返回false。与UIApplication.shared.canOpenURL相比,UIApplication.shared.canOpenURL是一个相当宽容的工具(如评论中提到的@AmitaiB ),它甚至可以检测出没有http://方案的URL。这样,在每次测试字符串时,我都可以检测到URL,而不必尝试添加方案。

SFSafariViewController只能使用http:///https://打开URL。因此,如果检测到的URL没有指定URL方案,并且希望打开链接,则必须手动添加该方案。

票数 88
EN

Stack Overflow用户

发布于 2017-01-13 11:06:18

对于被接受的答案的3种快速版本:

代码语言:javascript
运行
复制
func verifyUrl(urlString: String?) -> Bool {
    if let urlString = urlString {
        if let url = URL(string: urlString) {
            return UIApplication.shared.canOpenURL(url)
        }
    }
    return false
}

或者一个更快捷的解决方案:

代码语言:javascript
运行
复制
func verifyUrl(urlString: String?) -> Bool {
    guard let urlString = urlString,
          let url = URL(string: urlString) else { 
        return false 
    }

    return UIApplication.shared.canOpenURL(url)
}
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28079123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档