2012-08-16 15 views
0

是否有任何API或良好的函数来将字符串如 “www.example.com”或只是“example.com”格式化为有效urlstrings,如 “http://www.example。 COM“?从字符串创建一个有效的URL

+ (NSString*)complete:(NSString *)urlString 
{ 
    NSArray * urlParts = [urlString componentsSeparatedByString:@"."]; 
    if(urlParts.count==3) 
     return [NSString stringWithFormat:@"http://www.%@.%@",[urlParts objectAtIndex:1],[urlParts objectAtIndex:2]]; 
    else if(urlParts.count==2) 
     return [NSString stringWithFormat:@"http://www.%@.%@",[urlParts objectAtIndex:0],[urlParts objectAtIndex:1]]; 
    return nil; 
} 

这是目前的解决方案的样子,但这看起来不是很好,对我来说看起来不太好。

+0

你目前真的很糟糕。因为它没有考虑到很多可能性。你可能想看看使用正则表达式来检查你是否有一个有效的URL而不是componentsSeparatedByString。目前您的代码会忽略像http://www.thebestsiteintheworld.com/index.html这样的字符串,这会很糟糕。 – Jeremy1026 2012-08-16 16:20:08

回答

4

你可以用NSDataDetector做到这一点很容易:

NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:NULL]; 
NSString *URLString = @"www.example.com"; 
NSTextCheckingResult *result = [detector firstMatchInString:URLString options:0 range:NSMakeRange(0, URLString.length)]; 
if (result) { 
    NSURL *URL = [result URL]; 
    NSLog(@"%@", URL); // http://www.example.com 
} 

你不应该假定www是BTW任何给定域中的有效子域。

如果你需要的结果作为一个字符串,你可以使用的NSURLabsoluteString方法,它通常最好使用NSURL而不是NSString的网址,虽然。

+0

非常感谢,这是我一直在寻找的解决方案 – ChoboDev 2012-08-16 16:45:44