2017-01-06 11 views
0

Например:Как я могу получить только ДВУ NSURL?

"http://www.youtube.com" -> ".com"

"http://www.google.com.gr" -> ".com.gr"

"https://made.in.china.chinesewebsite.닷컴" ->

"닷컴."

Хост URL-адреса является тупиковым.

NSURL *URL; 

[URL host]; 
+0

http://stackoverflow.com/questions/20430620/is-it-possible-to-just-get-the-domain-and-tld-from-an-nsurl-no-www-or-anything –

+0

ответ считается само собой разумеющимся, что вы знаете, что ищете, и он проводит сравнение. Он работает для этого [URL isFromWebsite: «youtube.com»], а также [URL isFromWebsite: «. Com»]; – Vulkan

+0

Но '.com.gr' не является TLD -' .gr'. –

ответ

1

Получить множество URL-адресов, разбить его на . разделителем, и возьмите последний компонент.

- (NSString *) tldOfURL: NSURL *theURL; { 
    NSString *host = theURL.host; 
    NSArray *parts = [host componentsSeparatedByString: @"."]; 
    if parts.count < 2 { 
    return nil; 
    } 
    return parts.lastObject; 
} 

В первый мой ответ был использовать NSURLComponents, как и в большинстве случаев этот класс делает всю тяжелую работу за вас, но похоже, что он не имеет механизма для извлечения TLD.

Обратите внимание, что указанное выше будет возвращать нуль, если имя хоста не содержит хотя бы один период (.) и вернет пустую строку, если хост заканчивается периодом. Оба эти случая следует рассматривать как ошибки.

P.S. Я начинаю ржать на синтаксисе Objective-C. Трудно поверить, учитывая, сколько лет я потратил на создание Objective-C!

+0

Это не будет работать для «.com.gr» или любого другого TLD, который состоит из нескольких компонентов, разделенных точкой. Постскриптум Ваше имя звучит знакомо. :) – Vulkan