2011-11-22 36 views
6

我试图验证这种方法的URL:URL验证(Objective-C的)

代码:

- (BOOL) validateUrl: (NSString *) candidate { 

    NSString *urlRegEx= 
    @"((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)"; 

    NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 
    return [urlTest evaluateWithObject:candidate]; 

} 

它不起作用。我认为问题出在正则表达式上。

回答

13

您可以使用+ (id)URLWithString:(NSString *)URLString方法NSURL,如果字符串格式不正确,则返回nil。使用if (URL && URL.scheme && URL.host)检查URL。

+1

我试了一下!但它仍然行不通!例如“ht://www.yahoo”。这个效果很好!它不会回来! –

+2

根据RFC 2396,这是有效的URI。来自apple文档用于初始化NSURL对象的字符串。必须是符合RFC 2396的URL。此方法根据RFC 1738和1808解析URLString。使用“if(URL && URL.scheme && URL.host)”来检查URL。 –

+3

RFC 2396使用^(([^:/?#] +):)?(//([^ /?#] *))?([^?#] *)(\?([^#]) *))?(#(。*))?正则表达式。欲了解更多信息,请参阅http://www.ietf.org/rfc/rfc2396.txt –

7

尝试用这个..

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

它可以帮助你出来。

+0

它不适用于结尾处带'/'的网址...: - / –

1
NSString *urlRegEx = @"http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?";