दिलचस्प पोस्ट
एचटीएमएल फार्म टेक्स्टरेआ का मूल्य निर्धारित करना? JQuery ऑब्जेक्ट्स को मर्ज करना मैं क्रॉस-डोमेन कॉल्स के लिए एएसपी.नेट वेब सेवा से जेएसओएनपी का उत्पादन कैसे कर सकता हूं? एक फ्लोटिंग प्वाइंट नंबर के चिन्ह, मैन्टिसा और एक्सपोनेंट कैसे प्राप्त करें वेक्टर से कितने मूल्य हटाना है? एक फ़ोल्डर से एक submodule भंडार बनाएँ और अपने git प्रतिबद्ध इतिहास रखो जैक्सब अनमरशल टाइमस्टैम्प विकिपीडिया से इन्फोबॉक्स डेटा कैसे प्राप्त करें? क्रोम में जावास्क्रिप्ट के साथ कोई टैब केंद्रित है या नहीं, यह कैसे पता लगा सकता है? संग्रह में आइटम का योग क्या मैं UIPickerView स्क्रोल ध्वनि को अक्षम कर सकता हूँ? सूची करने के लिए <SubClass> कास्ट करने का सबसे कारगर तरीका <BaseClass> क्यों लोग एक पायथन लिपि की पहली पंक्ति पर #! / Usr / bin / env अजगर लिखते हैं? सी (चैर, इंट) में सूटिंग पॉइंटर्स क्या ऑफसेट हैइट, क्लाइंट हाईइट, स्क्रॉल हेइट?

आईफोन पर एक यूआरएल को कैसे मान्यता दी जाए

एक आईफोन ऐप में मैं विकास कर रहा हूं, एक ऐसी सेटिंग है जिसमें आप यूआरएल दर्ज कर सकते हैं क्योंकि फॉर्म और फंक्शन की वजह से इस यूआरएल को ऑनलाइन और ऑफ़लाइन मान्य किया जाना चाहिए।

अब तक मैं यूआरएल को मान्य करने के लिए कोई भी तरीका नहीं खोज पाया है, इसलिए सवाल है;

मैं iPhone (उद्देश्य-सी) ऑनलाइन और साथ ही ऑफ़लाइन पर यूआरएल इनपुट को कैसे मान्य करूं?

Solutions Collecting From Web of "आईफोन पर एक यूआरएल को कैसे मान्यता दी जाए"

इस पोस्ट के लिए धन्यवाद, आप RegexKit का उपयोग करने से बच सकते हैं। यहां मेरा समाधान है (आईओएस> 3.0 के साथ आईफोन विकास के लिए काम करता है):

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

क्यों नहीं बजाय बस Foundation.framework पर भरोसा करते हैं?

यह काम करता है और RegexKit आवश्यकता नहीं होती है:

 NSURL *candidateURL = [NSURL URLWithString:candidate]; // WARNING > "test" is an URL according to RFCs, being just a path // so you still should check scheme and all other NSURL attributes you need if (candidateURL && candidateURL.scheme && candidateURL.host) { // candidate is a well-formed url with: // - a scheme (like http://) // - a host (like stackoverflow.com) } 

ऐप्पल दस्तावेज़ के अनुसार:

URLWithString: एक प्रदान की गई स्ट्रिंग के साथ आरंभ किए गए एक NSURL ऑब्जेक्ट को बनाता है और रिटर्न करता है।

+ (id)URLWithString:(NSString *)URLString

पैरामीटर

URLString स्ट्रिंग: जिस स्ट्रिंग के साथ NSURL ऑब्जेक्ट को प्रारंभ करना है आरएफसी 2396 के अनुरूप होना चाहिए। यह विधि आरएफसी 1738 और 1808 के अनुसार यूआरएल स्ट्रिंग को पार्स करती है।

प्रतिलाभ की मात्रा

URLString के साथ आरम्भ किया गया एक NSURL ऑब्जेक्ट अगर स्ट्रिंग खराब थी, तो शून्य लौटा।

अपने स्वयं के नियमित अभिव्यक्ति लिखने के बजाय, ऐप्पल पर भरोसा करते हैं। मैं NSString पर एक श्रेणी का उपयोग कर रहा हूं जो स्ट्रिंग के भीतर एक लिंक की उपस्थिति के लिए परीक्षण करने के लिए NSDataDetector का उपयोग करता है। यदि NSDataDetector द्वारा मिले लिंक की सीमा पूरी स्ट्रिंग की लंबाई के बराबर होती है, तो यह एक मान्य URL है।

 - (BOOL)isValidURL { NSUInteger length = [self length]; // Empty strings should return NO if (length > 0) { NSError *error = nil; NSDataDetector *dataDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:&error]; if (dataDetector && !error) { NSRange range = NSMakeRange(0, length); NSRange notFoundRange = (NSRange){NSNotFound, 0}; NSRange linkRange = [dataDetector rangeOfFirstMatchInString:self options:0 range:range]; if (!NSEqualRanges(notFoundRange, linkRange) && NSEqualRanges(range, linkRange)) { return YES; } } else { NSLog(@"Could not create link data detector: %@ %@", [error localizedDescription], [error userInfo]); } } return NO; } 

स्विफ्ट के साथ मेरा समाधान:

 func validateUrl (stringURL : NSString) -> Bool { var urlRegEx = "((https|http)://)((\\w|-)+)(([.]|[/])((\\w|-)+))+" let predicate = NSPredicate(format:"SELF MATCHES %@", argumentArray:[urlRegEx]) var urlTest = NSPredicate.predicateWithSubstitutionVariables(predicate) return predicate.evaluateWithObject(stringURL) } 

परीक्षण के लिए:

 var boolean1 = validateUrl("http.s://www.gmail.com") var boolean2 = validateUrl("https:.//gmailcom") var boolean3 = validateUrl("https://gmail.me.") var boolean4 = validateUrl("https://www.gmail.me.com.com.com.com") var boolean6 = validateUrl("http:/./ww-w.wowone.com") var boolean7 = validateUrl("http://.www.wowone") var boolean8 = validateUrl("http://www.wow-one.com") var boolean9 = validateUrl("http://www.wow_one.com") var boolean10 = validateUrl("http://.") var boolean11 = validateUrl("http://") var boolean12 = validateUrl("http://k") 

परिणाम:

 false false false true false false true true false false false 

इसे इस्तेमाल करो-

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

मैंने RegexKit का उपयोग करते हुए समस्या का समाधान किया , और एक यूआरएल को मान्य करने के लिए त्वरित रेगएक्स का निर्माण किया;

 NSString *regexString = @"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+"; NSString *subjectString = brandLink.text; NSString *matchedString = [subjectString stringByMatching:regexString]; 

तब मैं जांचता हूं कि मैटस्ट्रिंग स्ट्रिंग बराबर है और यदि ऐसा है तो यूआरएल वैध है।

मुझे सही करें अगर मेरा regex गलत है;)

यदि आप http या https या www नहीं चाहते हैं, तो आप इसका उपयोग कर सकते हैं

 NSString *urlRegEx = @"^(http(s)?://)?((www)?\.)?[\w]+\.[\w]+"; 

उदाहरण

 - (void) testUrl:(NSString *)urlString{ NSLog(@"%@: %@", ([self isValidUrl:urlString] ? @"VALID" : @"INVALID"), urlString); } - (void)doTestUrls{ [self testUrl:@"google"]; [self testUrl:@"google.de"]; [self testUrl:@"www.google.de"]; [self testUrl:@"http://www.google.de"]; [self testUrl:@"http://google.de"]; } 

आउटपुट:

 INVALID: google VALID: google.de VALID: www.google.de VALID: http://www.google.de VALID: http://google.de 

Lefakir के समाधान में एक समस्या है उनका regex " http://instagram.com/p/4Mz3dTJ-ra/ " के साथ मेल नहीं खा सकता है यूआरएल घटक संख्यात्मक और शाब्दिक चरित्र को जोड़ता है उनके regex असफल ऐसे यूआरएल

यहाँ मेरा सुधार है

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

मैंने ऐसा करने का सबसे आसान तरीका पाया है:

 - (BOOL)validateUrl: (NSURL *)candidate { NSURLRequest *req = [NSURLRequest requestWithURL:candidate]; return [NSURLConnection canHandleRequest:req]; } 

नीचे दिए गए कोड आपको मान्य यूआरएल ढूंढने देंगे

  NSPredicate *websitePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",@"^(((((h|H)(t|T){2}(p|P)s?)|((f|F)(t|T)(p|P)))://(w{3}.)?)|(w{3}.))[A-Za-z0-9]+(.[A-Za-z0-9-:;\?#_]+)+"]; if ([websitePredicate evaluateWithObject:##MY_STRING##]) { printf"Valid" } 

ऐसे URLS के लिए

अजीब तरह से, मुझे वास्तव में एक समाधान नहीं मिला जो कि बहुत आसान था, फिर भी अभी भी http / https लिंक को संभालने के लिए ठीक काम किया है

ध्यान रखें, यह एक सही समाधान नहीं है, लेकिन यह नीचे के मामलों के लिए काम किया है। संक्षेप में, regex परीक्षण करता है कि URL http:// या https:// साथ शुरू होता है, फिर कम से कम 1 वर्ण की जांच करता है, फिर डॉट के लिए जांच करता है, और फिर कम से कम 1 वर्ण के लिए फिर से जांचता है। कोई रिक्त स्थान की अनुमति दी।

 + (BOOL)validateLink:(NSString *)link { NSString *regex = @"(?i)(http|https)(:\\/\\/)([^ .]+)(\\.)([^ \n]+)"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; return [predicate evaluateWithObject:link]; } 

इन यूआरएल के खिलाफ प्रमाणित परीक्षण:

 @"HTTP://FOO.COM", @"HTTPS://FOO.COM", @"http://foo.com/blah_blah", @"http://foo.com/blah_blah/", @"http://foo.com/blah_blah_(wikipedia)", @"http://foo.com/blah_blah_(wikipedia)_(again)", @"http://www.example.com/wpstyle/?p=364", @"https://www.example.com/foo/?bar=baz&inga=42&quux", @"http://✪df.ws/123", @"http://userid:password@example.com:8080", @"http://userid:password@example.com:8080/", @"http://userid@example.com", @"http://userid@example.com/", @"http://userid@example.com:8080", @"http://userid@example.com:8080/", @"http://userid:password@example.com", @"http://userid:password@example.com/", @"http://142.42.1.1/", @"http://142.42.1.1:8080/", @"http://➡.ws/䨹", @"http://⌘.ws", @"http://⌘.ws/", @"http://foo.com/blah_(wikipedia)#cite-", @"http://foo.com/blah_(wikipedia)_blah#cite-", @"http://foo.com/unicode_(✪)_in_parens", @"http://foo.com/(something)?after=parens", @"http://☺.damowmow.com/", @"http://code.google.com/events/#&product=browser", @"http://j.mp", @"http://foo.bar/?q=Test%20URL-encoded%20stuff", @"http://مثال.إختبار", @"http://例子.测试", @"http://उदाहरण.परीक्षा", @"http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com", @"http://1337.net", @"http://ab-c.de", @"http://223.255.255.254" 

इन URL के विरुद्ध INVALID का परीक्षण किया गया:

 @"", @"foo", @"ftp://foo.com", @"ftp://foo.com", @"http://..", @"http://..", @"http://../", @"//", @"///", @"http://##/", @"http://.www.foo.bar./", @"rdar://1234", @"http://foo.bar?q=Spaces should be encoded", @"http:// shouldfail.com", @":// should fail" 

यूआरएल के स्रोत: https://mathiasbynens.be/demo/url-regex

अनुमोदित जवाब गलत है इसमें मेरे पास एक यूआरएल है, और सत्यापन विफल रहता है।

जी + लिंक का समर्थन करने के लिए वैभव का जवाब मिला:

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

अंत में / बिना किसी यूआरएल को ऊपर दिए गए समाधानों में सही एक के रूप में नहीं मिला है तो यह सहायक हो सकता है

  extension String { func isValidURL() -> Bool{ let length:Int = self.characters.count var err:NSError? var dataDetector:NSDataDetector? = NSDataDetector() do{ dataDetector = try NSDataDetector(types: NSTextCheckingType.Link.rawValue) }catch{ err = error as NSError } if dataDetector != nil{ let range = NSMakeRange(0, length) let notFoundRange = NSRange(location: NSNotFound, length: 0) let linkRange = dataDetector?.rangeOfFirstMatchInString(self, options: NSMatchingOptions.init(rawValue: 0), range: range) if !NSEqualRanges(notFoundRange, linkRange!) && NSEqualRanges(range, linkRange!){ return true } }else{ print("Could not create link data detector: \(err?.localizedDescription): \(err?.userInfo)") } return false } } 

स्विफ्ट में यूआरएल सत्यापन

विवरण

xCode 8.2.1, तेज 3

कोड

enum URLSchemes: स्ट्रिंग

 import Foundation enum URLSchemes: String { case http = "http://", https = "https://", ftp = "ftp://", unknown = "unknown://" static func detectScheme(urlString: String) -> URLSchemes { if URLSchemes.isSchemeCorrect(urlString: urlString, scheme: .http) { return .http } if URLSchemes.isSchemeCorrect(urlString: urlString, scheme: .https) { return .https } if URLSchemes.isSchemeCorrect(urlString: urlString, scheme: .ftp) { return .ftp } return .unknown } static func getAllSchemes(separetedBy separator: String) -> String { return "\(URLSchemes.http.rawValue)\(separator)\(URLSchemes.https.rawValue)\(separator)\(URLSchemes.ftp.rawValue)" } private static func isSchemeCorrect(urlString: String, scheme: URLSchemes) -> Bool { if urlString.replacingOccurrences(of: scheme.rawValue, with: "") == urlString { return false } return true } } 

एक्सटेंशन स्ट्रिंग

 import Foundation extension String { var isUrl: Bool { // for http://regexr.com checking // (?:(?:https?|ftp):\/\/)(?:xn--)?(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[az\u00a1-\uffff0-9]+-?)*[az\u00a1-\uffff0-9]+)(?:\.(?:[az\u00a1-\uffff0-9]+-?)*[az\u00a1-\uffff0-9]+)*(?:\.(?:[#-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/[^\s]*)? let schemes = URLSchemes.getAllSchemes(separetedBy: "|").replacingOccurrences(of: "://", with: "") let regex = "(?:(?:\(schemes)):\\/\\/)(?:xn--)?(?:\\S+(?::\\S*)?@)?(?:(?!10(?:\\.\\d{1,3}){3})(?!127(?:\\.\\d{1,3}){3})(?!169\\.254(?:\\.\\d{1,3}){2})(?!192\\.168(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[az\\u00a1-\\uffff0-9]+-?)*[az\\u00a1-\\uffff0-9]+)(?:\\.(?:[az\\u00a1-\\uffff0-9]+-?)*[az\\u00a1-\\uffff0-9]+)*(?:\\.(?:[#-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?" let regularExpression = try! NSRegularExpression(pattern: regex, options: []) let range = NSRange(location: 0, length: self.characters.count) let matches = regularExpression.matches(in: self, options: [], range: range) for match in matches { if range.location == match.range.location && range.length == match.range.length { return true } } return false } var toURL: URL? { let urlChecker: (String)->(URL?) = { url_string in if url_string.isUrl, let url = URL(string: url_string) { return url } return nil } if !contains(".") { return nil } if let url = urlChecker(self) { return url } let scheme = URLSchemes.detectScheme(urlString: self) if scheme == .unknown { let newEncodedString = URLSchemes.http.rawValue + self if let url = urlChecker(newEncodedString) { return url } } return nil } } 

प्रयोग

  func tests() { chekUrl(urlString:"http://example.com") chekUrl(urlString:"https://example.com") chekUrl(urlString:"http://example.com/dir/file.php?var=moo") chekUrl(urlString:"http://xn--h1aehhjhg.xn--d1acj3b") chekUrl(urlString:"http://www.example.com/wpstyle/?p=364") chekUrl(urlString:"http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com") chekUrl(urlString:"http://example.com") chekUrl(urlString:"http://xn--d1acpjx3f.xn--p1ai") chekUrl(urlString:"http://xn--74h.damowmow.com/") chekUrl(urlString:"ftp://example.com:129/myfiles") chekUrl(urlString:"ftp://user:pass@site.com:21/file/dir") chekUrl(urlString:"ftp://ftp.example.com:2828/asdah%20asdah.gif") chekUrl(urlString:"http://142.42.1.1:8080/") chekUrl(urlString:"http://142.42.1.1/") chekUrl(urlString:"http://userid:password@example.com:8080") chekUrl(urlString:"http://userid@example.com") chekUrl(urlString:"http://userid@example.com:8080") chekUrl(urlString:"http://foo.com/blah_(wikipedia)#cite-1") chekUrl(urlString:"http://foo.com/(something)?after=parens") print("\n----------------------------------------------\n") chekUrl(urlString:".") chekUrl(urlString:" ") chekUrl(urlString:"") chekUrl(urlString:"-/:;()₽&@.,?!'{}[];'<>+_)(*#^%$") chekUrl(urlString:"localhost") chekUrl(urlString:"yandex.") chekUrl(urlString:"коряга") chekUrl(urlString:"http:///a") chekUrl(urlString:"ftps://foo.bar/") chekUrl(urlString:"rdar://1234") chekUrl(urlString:"h://test") chekUrl(urlString:":// should fail") chekUrl(urlString:"http://-error-.invalid/") chekUrl(urlString:"http://.www.example.com/") } func chekUrl(urlString: String) { var result = "" if urlString.isUrl { result += "url: " } else { result += "not url: " } result += "\"\(urlString)\"" print(result) } 

परिणाम

यहां छवि विवरण दर्ज करें

क्या आप यह देखना चाहते थे कि उपयोगकर्ता द्वारा दर्ज किए गए यूआरएल क्या है? यह एक नियमित अभिव्यक्ति के रूप में सरल हो सकता है, उदाहरण के लिए अगर स्ट्रिंग में www. (यह तरीका है कि याहू मैसेंजर की जांच करता है कि उपयोगकर्ता स्थिति एक लिंक है या नहीं)
उम्मीद है कि मदद

स्वाभाविक रूप से, मैं इनपुट को मान्य करने के लिए एक KSURLFormatter इंस्टेंस का उपयोग करने का सुझाव देता हूं, और इसे NSURL को संभाल सकता है।

मैंने यूआईटीextफिल्ड के इनहेरिट किया गया वर्ग का निर्माण किया है जो सभी प्रकार की मान्यता को रीगेक्स स्ट्रिंग का उपयोग कर सकता है। इस में आपको उन्हें क्रम में सभी regex स्ट्रिंग देना होगा और उनके संदेश को दिखाया जाना चाहिए, जब सत्यापन विफल हो जाता है। आप अधिक जानकारी के लिए अपने ब्लॉग को देख सकते हैं, यह वाकई आपकी मदद करेगा

http://dhawaldawar.wordpress.com/2014/06/11/uitextfield-validation-ios/

@ एंथोनी के उत्तर में तेजी लाने के लिए, मैंने String पर एक श्रेणी लिखा, जो वैकल्पिक NSURL । रिटर्न वैल्यू nil अगर String को यूआरएल के रूप में मान्य नहीं किया जा सकता है।

 import Foundation // A private global detector variable which can be reused. private let detector = try! NSDataDetector(types: NSTextCheckingType.Link.rawValue) extension String { func URL() -> NSURL? { let textRange = NSMakeRange(0, self.characters.count) guard let URLResult = detector.firstMatchInString(self, options: [], range: textRange) else { return nil } // This checks that the whole string is the detected URL. In case // you don't have such a requirement, you can remove this code // and return the URL from URLResult. guard NSEqualRanges(URLResult.range, textRange) else { return nil } return NSURL(string: self) } } 
 func checkValidUrl(_ strUrl: String) -> Bool { let urlRegEx: String = "(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+" let urlTest = NSPredicate(format: "SELF MATCHES %@", urlRegEx) return urlTest.evaluate(with: strUrl) }