在 Cocoa 应用程序中验证用户输入的 URL 的最佳方法是什么?

What's the best way to validate a user-entered URL in a Cocoa application?

提问人:mclaughj 提问时间:10/11/2008 最后编辑:Ned Batcheldermclaughj 更新时间:11/6/2008 访问量:3503

问:

我正在尝试构建一个自制的网络浏览器,以更加熟练地掌握 Cocoa。我需要一种很好的方法来验证用户是否输入了有效的 URL。我尝试过一些正则表达式,但 NSString 有一些有趣的怪癖,并且不喜欢我见过的大多数正则表达式使用的一些反引号。

正则表达式 验证 URL

评论


答:

5赞 Jon Shea 10/11/2008 #1

可以从 NSURL+ (id)URLWithString:(NSString *)URLString 方法开始,如果字符串格式不正确,则返回该方法。nil

如果需要进一步验证,可以使用 、 、 、 等 方法为 URL 提供特定组件,然后您可以以任何您认为合适的方式对其进行评估。baseURLhostparameterStringpath

评论

5赞 Paul Wieland 9/10/2011
对于对此感到困惑的人:NSURL *myURL = [NSURL URLWithString:@“test”];if(myURL){ } 是不够的,因为“test”是有效的 URL。你可能想添加 use: if (myURL & myURL.scheme & myURL.host) { }
0赞 Eugene P 7/9/2014
如果 (myURL & myURL.scheme && myURL.host) { } 这将不起作用。它仍然对 ULR 有效,例如“xxxx://xxxx://www.googl.com”
4赞 danwood 10/11/2008 #2

我发现可以输入一些看似可以但被 NSURL 创建方法拒绝的 URL。因此,我们有一个方法可以首先对字符串进行转义,以确保它的格式良好。这是它的精髓:

NSString *escapedURLString =
    NSMakeCollectable(CFURLCreateStringByAddingPercentEscapes(NULL,
      (CFStringRef)URLString,
      (CFStringRef)@"%+#",  // Characters to leave unescaped
      NULL,
      kCFStringEncodingUTF8));

上一个:验证网页

下一个:基于 PHP 的表单验证