2011-11-22 2 views
6

나는이 방법과 URL을 확인하려고 :URL 검증 (목표 - 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을 반환합니다.

URL을 확인하는 데 if (URL && URL.scheme && URL.host)을 사용하십시오.

+1

나는 그것을 시도했다! 하지만 여전히 작동하지 않습니다! 예 : "ht : //www.yahoo" 이것은 잘 작동합니다! 그리고 그것은 nill을 돌려 보내지 않는다! !! –

+2

RFC 2396에 따라 유효한 UR1입니다. apple 설명서에서 NSURL 개체를 초기화 할 문자열입니다. RFC 2396을 준수하는 URL이어야합니다.이 메서드는 RFC 1738 및 1808에 따라 URLString을 구문 분석합니다. URL을 확인하기 위해 "if (URL && URL.scheme && URL.host)"를 사용합니다. –

+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

끝에 '/'가있는 URL에는 작동하지 않습니다. - : / –

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