2011-08-10 2 views

ответ

-2

Вы можете использовать регулярное выражение. Для iPhone 3 и выше вы можете сделать это без рамки. В противном случае используйте RegexKitLite или что-то в этом роде.

Вот регулярное выражение шаблон для проверки URL-адресов:

"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+" 

Делать это без рамки:

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

Используйте 'NSURL', как описано PeyloW. NSURL предназначен для обработки полного стандарта URL; лучше всего не изобретать колесо. – bbum

+0

Truth ^^ Я забыл про NSUrl. НО, если по какой-то причине вы захотите расслабиться (или сделать более строгим, NSUrl примет префиксы, отличные от http и https), стандарт проверки, который вы все еще можете захотеть определить свой собственный шаблон. – mattacular

+0

Yah - но вы, вероятно, захотите начать с [вероятно, значительно более сложного] выражения, принимающего стандарт, а затем отступить для поддержки нестандартных URL-адресов. Или, лучше, исправить источник недействительных URL-адресов. :) – bbum

25

ли это:

NSURL* url = [NSURL URLWithString:stringToTest]; 
if (url && url.scheme && url.host)//This comparision never fails 
{ 
    //the url is ok 
    NSLog(@"%@ is a valid URL", yourUrlString); 
} 

Если stringToTest действительно является URL, то URL будет экземпляр, как и ожидалось. В противном случае +[NSURL URLWithString:] возвращение nil.

Большинство методов в Cocoa Touch return nil на незаконном вводе, очень немногие фактически бросают NSInvalidArgumentException. Каждый метод документируется тем, что они возвращают с недопустимым вводом.

+0

Ницца. Никогда не думал бы использовать NSURL для проверки строки url. –

+2

Просто помните, что это подтвердит ЛЮБОЙ URL. Поэтому, даже если это URL-адрес файла или веб-URL, они будут проверять правильность с помощью этой формы проверки. Ответ PeyloW прав, я просто хотел сообщить вам, что веб-URL - это не единственный тип, который принимает NSURL. –

+2

Также обратите внимание, что он проверяет частичные и относительные URL-адреса. Таким образом, проверка схемы и/или домена также может быть хорошей практикой. – PeyloW

Смежные вопросы