iPhone SDK:检查NSURL无效的网址的有效性?

时间:2011-03-20 17:06:47

标签: iphone objective-c url sdk nsurl

我正在尝试检查给定的网址是否有效,我这样做是这样的:

- (BOOL)urlIsValid:(NSString *)address {
    NSURL *testURL = [NSURL URLWithString:address];
    if (testURL == nil) {
        return NO;
    }
    else {
        return YES;
    }
}

因为如果URL格式错误,“URLWithString”应返回“nil”,我认为这样可行,但不是出于某种原因。有人可以告诉我为什么吗? 提前谢谢!

5 个答案:

答案 0 :(得分:17)

NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"yourstring"]];
bool valid = [NSURLConnection canHandleRequest:req];

答案 1 :(得分:5)

检查此方法对我来说没问题

- (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];

}

if (![self validateUrl:strRSSurl]) {
        UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Invalid url" message:[NSString stringWithFormat:@"\"%@\"",strRSSurl] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
        [alert show ];
        [alert setTag:7];
    }
    else
    {
      valid url
    }

答案 2 :(得分:3)

我认为你可能会对“畸形”的定义感到困惑。符合RFC 2396的任何内容都被视为有效;在实践中,似乎NSURL也会接受[],尽管它们不被RFC允许。

这意味着除了空格"%之外几乎任何字符串的可打印ASCII字符,如果没有后跟两个十六进制数字,<>,{{1 }},\^`{|将被视为“有效”,但它可能不是绝对的或通常有用的。包含多个}的字符串也可能被拒绝。

答案 3 :(得分:0)

对此没有很好的解释,您提供的代码看起来非常好,应该可以解释您的目的。

对于格式错误的网址,您指的是导致404错误的网址,还是包含无效格式或字符的网址?

举例说明在此函数中返回yes的格式错误的URL。

答案 4 :(得分:0)

根据我的经验,NSURL创建例程通常抛出异常而不是返回nil。但是,在这种情况下真正的问题是什么构成格式错误的URL?您是在检查资源是否存在,或者检查字符串的结构是否符合相关的RFC?

关于我提到的第一个问题,在创建我不手动输入自己的网址时,我通常会这样做:

@try
{
    NSURL * url = [NSURL URLWithString: theString];
    // use the URL
}
@catch (NSException * e)
{
    NSLog( @"URL creation error? %@ - %@", [e name], [e reason] );
    @throw;  // throw the exception again, to hopefully get your attention
}