2011-11-22 21 views
6

tôi đang cố gắng để xác nhận một URL với phương pháp này:URL Validation (Objective-C)

Code:

- (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]; 

} 

Nó không hoạt động. Tôi nghĩ vấn đề là với biểu thức chính quy.

Trả lời

13

Bạn có thể sử dụng phương thức + (id)URLWithString:(NSString *)URLString của NSURL, trả về nil nếu chuỗi không đúng định dạng.

Sử dụng if (URL && URL.scheme && URL.host) để kiểm tra URL.

+1

tôi đã dùng thử! nhưng nó vẫn không hoạt động! ví dụ: "ht: //www.yahoo." điều này hoạt động tốt! và nó không trở lại nill !!! –

+2

Đây là URl hợp lệ theo RFC 2396.Từ tài liệu hướng dẫn của Apple Chuỗi ký tự để khởi tạo đối tượng NSURL. Phải là URL phù hợp với RFC 2396. Phương pháp này phân tích cú pháp URLString theo RFC 1738 và 1808. sử dụng "if (URL && URL.scheme && URL.host)" để kiểm tra URL. –

+3

RFC 2396 sử dụng^(([^: /? #] +):)? (// ([^ /? #] *))? ([^? #] *) (\? ([^ #] *))? (# (. *))? biểu hiện thông thường. Để biết thêm thông tin, hãy tham khảo http://www.ietf.org/rfc/rfc2396.txt –

7

Hãy thử với điều này ..

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

nó có thể giúp u ra.

+0

nó không hoạt động cho các url có '/' ở cuối ...: - / –

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