2011-11-22 12 views
6

मैं इस विधि के साथ एक यूआरएल को मान्य करने के कोशिश कर रहा हूँ:यूआरएल मान्यता (ऑब्जेक्टिव-सी)

कोड:

- (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 *)URLStringNSURL की विधि का उपयोग कर सकते हैं, जो स्ट्रिंग खराब होने पर nil देता है।

URL की जांच के लिए if (URL && URL.scheme && URL.host) का उपयोग करें।

+1

मैंने कोशिश की! लेकिन फिर भी यह काम नहीं करता है! उदाहरण के लिए "एचटी: //www.yahoo।" यह अच्छी तरह से काम करता है! और यह शून्य वापस नहीं आता है !!! –

+2

यह आरएफसी 2396 के अनुसार मान्य यूआरएल है। सेब प्रलेखन से स्ट्रिंग जिसके साथ NSURL ऑब्जेक्ट प्रारंभ करना है। आरएफसी 2396 के अनुरूप एक यूआरएल होना चाहिए। यह विधि यूआरएल की जांच के लिए यूआरएलस्ट्रिंग को आरआरसीएस 1738 और 1808 के अनुसार पार्स करती है। यूआरएल की जांच के लिए "if (URL और& URL.scheme && URL.host)" का उपयोग करें। –

+3

आरएफसी 23 9 6 इस^का उपयोग करता है (([^: /? #] +):)? (// ([^ /? #] *))? ([^? #] *) (\? ([^ #] *))? (। # (*))? नियमित अभिव्यक्ति। अधिक जानकारी के लिए 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

यह अंत में '/' के साथ यूआरएल के लिए काम नहीं करता है ...: - / –

1
NSString *urlRegEx = @"http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?"; 
संबंधित मुद्दे