2012-02-13 4 views
7

मुझे कोड लिखने में मदद करें जैसे "अगर मेरी स्ट्रिंग एक वैध यूआरएल है smth" क्या कोड के दो तारों में इसे लिखना संभव है?एनएसएसटींग ऑब्जेक्ट एक वैध यूआरएल है या नहीं, जल्दी से जांच कैसे करें?

+1

द्वारा "वैध" आप बस वाक्य रचना आवश्यकताओं को पूरा करने का मतलब है, या आप एक की ओर इशारा करते मतलब है मौजूदा साइट? –

+0

मैं सिर्फ सही वाक्य रचना की जरूरत है .. – Stas

उत्तर

19

मुझे लगता है कि यूआरएल द्वारा, आप इंटरनेट संसाधन स्थान की पहचान करने वाली स्ट्रिंग का जिक्र कर रहे हैं।

यदि आपके पास इनपुट स्ट्रिंग के प्रारूप के बारे में कोई विचार है, तो मैन्युअल रूप से जांचें कि स्ट्रिंग http://, https:// या किसी अन्य योजना के साथ शुरू होती है या नहीं। आप अन्य प्रोटोकॉल उम्मीद हैं, तो आप भी उन्हें जांच सूची (जैसे ftp://, mailto://, आदि)



if ([myString hasPrefix:@"http://"] || [myString hasPrefix:@"https://"]) 
{ 
    // do something 
} 

को जोड़ सकते हैं आप एक अधिक ठोस समाधान के लिए देख रहे हैं और URL योजना के किसी भी प्रकार का पता लगाने, तो आप चाहिए नियमित अभिव्यक्ति का प्रयोग करें।

एक साइड नोट के रूप में, एनएसआरएल क्लास को किसी प्रकार का संसाधन स्थान (केवल इंटरनेट संसाधन नहीं) व्यक्त करने के लिए डिज़ाइन किया गया है। यही कारण है कि, img/demo.jpg या file://bla/bla/bla/demo.jpg जैसे तारों को NSURL ऑब्जेक्ट्स में परिवर्तित किया जा सकता है।

हालांकि, दस्तावेज के अनुसार [NSURL URLWithString] इनपुट स्ट्रिंग मान्य इंटरनेट संसाधन स्ट्रिंग नहीं है, तो शून्य वापस आना चाहिए। अभ्यास में यह नहीं है।

+0

महान उत्तर! धन्यवाद। और सबसे महत्वपूर्ण यह है कि यह मेरे लिए ठीक काम करता है। – Stas

1

इसके साथ NSUrl बनाने का प्रयास करें, और देखें कि यह गैर-शून्य परिणाम देता है या नहीं।

+0

मैं पहले से ही की कोशिश की है कि: अगर ([NSURL urlWithString: urlString]! = शून्य) {} लेकिन किसी कारण से यह सिर्फ मुझे मेरी स्ट्रिंग रिटर्न !! (हालांकि विधि विवरण कहता है कि यदि स्ट्रिंग वैध यूआरएल नहीं है तो उसे शून्य वापस करना होगा .. वास्तव में नहीं पता क्यों) – Stas

0
if ([NSURL URLWithString:text]) { 
    // valid URL 
} 
else { 
    // invalid URL 
} 
+0

यह बिंदु है कि यह काम नहीं करता है ... क्या मैंने एक अजीब बग से मुलाकात की है या क्या ?? ? मेरे पास NSLog (@ "अवैध url:% @", [NSURL URLWithString: urlString] में लॉग इन है); और यह मुझे दिखाता है: अमान्य यूआरएल: img/playgrounds.png – Stas

+3

यही कारण है कि आपको यह कहना चाहिए कि आपने पहले से ही अपने प्रश्न में क्या प्रयास किया है। यदि आपकी स्ट्रिंग सचमुच "img/playgrounds.png" है तो यह सही है; यह वैध यूआरएल नहीं है। यदि आप इसे आज़माएं, तो कहें, 'http: // img.ly/playground.png' तो यह काम करेगा। –

6
+ (BOOL)validateUrlString:(NSString*)urlString 
{ 
    if (!urlString) 
    { 
     return NO; 
    } 

    NSDataDetector *linkDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil]; 

    NSRange urlStringRange = NSMakeRange(0, [urlString length]); 
    NSMatchingOptions matchingOptions = 0; 

    if (1 != [linkDetector numberOfMatchesInString:urlString options:matchingOptions range:urlStringRange]) 
    { 
     return NO; 
    } 

    NSTextCheckingResult *checkingResult = [linkDetector firstMatchInString:urlString options:matchingOptions range:urlStringRange]; 

    return checkingResult.resultType == NSTextCheckingTypeLink 
     && NSEqualRanges(checkingResult.range, urlStringRange); 
} 
+0

यह काम करता है। धन्यवाद – kevinl

7

मैं इस समाधान जो जाहिरा तौर पर एक Regex जांच की तुलना में एक बेहतर और कम जटिल जांच है इस्तेमाल किया -

- (BOOL)isURL:(NSString *)inputString 
{ 
    NSURL *candidateURL = [NSURL URLWithString:inputString]; 
    return candidateURL && candidateURL.scheme && candidateURL.host; 
} 
संबंधित मुद्दे