Swift中的URL验证

Ste*_*lla 4 ios swift

在我的Swift iOS项目中,我想在请求服务器之前检查是否为有效URL。我之前在Objective C代码中做了检查许多元素,例如www,http,https 、:等的存在,以验证是否正确的url。Swift代码中是否有类似内容?

我期望像这样的Obj C方法。

 - (BOOL) validateUrl: (NSString *) candidate {
    NSString *urlRegEx =
    @"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+";
    NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 
    return [urlTest evaluateWithObject:candidate];
}
Run Code Online (Sandbox Code Playgroud)

请提出建议。

Ash*_*shu 7

斯威夫特4.x

这涵盖了所有类型的验证(如子域),无论是否带有HTTP / HTTPS

func isValidUrl(url: String) -> Bool {
    let urlRegEx = "^(https?://)?(www\\.)?([-a-z0-9]{1,63}\\.)*?[a-z0-9][-a-z0-9]{0,61}[a-z0-9]\\.[a-z]{2,6}(/[-\\w@\\+\\.~#\\?&/=%]*)?$"
    let urlTest = NSPredicate(format:"SELF MATCHES %@", urlRegEx)
    let result = urlTest.evaluate(with: url)
    return result
}
Run Code Online (Sandbox Code Playgroud)

希望这对您有用。


Leo*_*bus 4

您可以使用stringByAddingPercentEscapesUsingEncoding方法来替换您的链接可能具有的任何特殊字符,然后您可以使用NSURL(string:)检查您的链接是否是有效的网址,如下所示:

let link =  "http://www.yourUrl.com".stringByRemovingPercentEncoding!.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!

if let checkedUrl = NSURL(string: link) {
    // you can use checkedUrl here
}
Run Code Online (Sandbox Code Playgroud)

注意:NSURL(string:) 仅适用于网络链接。如果您想为本地资源文件创建 NSURL,则需要使用 NSURL(fileURLWithPath:)

  • 您可能想解释一下原理 (2认同)
  • @Wain 有什么需要解释的吗?NSURL 已经进行了检查,并且仅在为其提供了有效字符串的情况下才返回一个实例。无需重新发明轮子。 (2认同)