我正在尝试检查给定的网址是否有效,我这样做是这样的:
- (BOOL)urlIsValid:(NSString *)address {
NSURL *testURL = [NSURL URLWithString:address];
if (testURL == nil) {
return NO;
}
else {
return YES;
}
}
因为如果URL格式错误,“URLWithString”应返回“nil”,我认为这样可行,但不是出于某种原因。有人可以告诉我为什么吗? 提前谢谢!
答案 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
}