Я пытаюсь создать домашний веб-браузер, чтобы лучше разбираться в Какао. Мне нужен хороший способ проверить, ввел ли пользователь действительный URL-адрес. Я пробовал некоторые регулярные выражения, но у NSString есть некоторые интересные особенности, и ему не нравятся некоторые обратные кавычки, которые используются в большинстве регулярных выражений, которые я видел.





Вы можете начать с метода + (id)URLWithString:(NSString *)URLString для NSURL, который возвращает nil, если строка искажена.
Если вам нужна дополнительная проверка, вы можете использовать методы baseURL, host, parameterString, path и т. д., Чтобы предоставить вам определенные компоненты URL-адреса, которые вы затем можете оценить любым способом, который вы сочтете нужным.
if (myURL && myURL.scheme && myURL.host) {} это не сработает. Он будет по-прежнему действителен для ULR, например "xxxx: // xxxx: //www.googl.com"
Я обнаружил, что можно ввести некоторые URL-адреса, которые кажутся нормальными, но отклоняются методами создания NSURL. Итак, у нас есть способ сначала экранировать строку, чтобы убедиться, что она в хорошем формате. Вот его суть:
NSString *escapedURLString =
NSMakeCollectable(CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)URLString,
(CFStringRef)@"%+#", // Characters to leave unescaped
NULL,
kCFStringEncodingUTF8));
Для всех, кого это смущает: NSURL * myURL = [NSURL URLWithString: @ "test"]; if (myURL) {} недостаточно, потому что "test" - допустимый URL. Вероятно, вы захотите добавить use: if (myURL && myURL.scheme && myURL.host) {}