कैसे iPhone पर एक यूआरएल को मान्य करने के लिए


90

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

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

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


टिप्पणियों को उसके उत्तर में पढ़ें, सत्यापन सही ढंग से काम नहीं करता है।
थिज़र

जवाबों:


98

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

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

यदि आप नीचे दिए गए मेरे समाधान स्विफ्ट में जांचना चाहते हैं:

 func isValidUrl(url: String) -> Bool {
        let urlRegEx = "^(https?://)?(www\\.)?([-a-z0-9]{1,63}\\.)*?[a-z0-9][-a-z0-9]{0,61}[a-z0-9]\\.[a-z]{2,6}(/[-\\w@\\+\\.~#\\?&/=%]*)?$"
        let urlTest = NSPredicate(format:"SELF MATCHES %@", urlRegEx)
        let result = urlTest.evaluate(with: url)
        return result
    }

7
यह केवल " webr.ly " प्रकार के urls के लिए काम करता है, youtube.com/watch?v=mqgExtdNMBk
ThE uSeFuL

5
((http|https)://)?((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+".यह http: // या https: // बनाना चाहिए वैकल्पिक है।
युंग

google.com, www.google.com और //www.google.com के लिए भी काम नहीं कर रहा है
संशोधित करें

निम्नलिखित यूआरएल मेरे मामले में काम नहीं कर रहे हैं। money.cnn.com/2015/10/19/technology/apple-app-store/…
DJtiwari

@DJtiwari +1 हां यह काम नहीं कर रहा है क्या आपको इसके लिए कोई फिक्स मिला है?
हमजा मिहारा

239

इसके बजाय बस पर भरोसा क्यों नहीं 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)
}

Apple प्रलेखन के अनुसार:

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

+ (id)URLWithString:(NSString *)URLString

पैरामीटर

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

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

एक NSURL ऑब्जेक्ट को URLString के साथ आरंभ किया गया। यदि स्ट्रिंग विकृत हो गई थी, तो शून्य लौटाता है।


1
मैं यहां कुछ अन्य लोगों से सहमत हूं। यह एक बेहतर समाधान है जो नियमित भावों के साथ घूमता है। यह सही ढंग से जांचा गया उत्तर होना चाहिए।
डिएगो बैरोस

1
@MrThys - ऐसा कोई भी मौका, जिसके उदाहरण आप प्रदान कर सकते हैं कि यह कौन सा विकृत यूआरएल है जो पकड़ में नहीं आता है? यह जानकर बहुत अच्छा लगेगा .. अब तक एक उत्कृष्ट समाधान लगता है।
डॉन वॉन

7
@DonamiteIsTnt URL http://www.aol.comhttp://www.nytimes.comइस परीक्षा को पास करता है।
एरॉन ब्रेजर

1
कोड विकृत url के लिए जाँच नहीं करेगा। Ex: <code> afasd </ code >, url अभी भी परीक्षा पास करेगा
denil

39
डॉक्स गलत हैं। कुछ परीक्षण लिखें - NSURLजब मैं @ "# # @ @ $ ##% $ # $ #", या @ "tp: / fdfdfsfdsf" की स्ट्रिंग पास नहीं करता हूं तो शून्य नहीं लौटाता। तो यह विधि मान्य HTTP URL और इस तरह की जाँच के लिए बेकार होगी।
टोनी अर्नाल्ड

32

अपनी खुद की नियमित अभिव्यक्ति लिखने के बजाय, Apple पर भरोसा करें। मैं 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;
}

अत्यंत चतुर। असली इंजीनियरिंग। {आप जानते हैं, मुझे एक अजीब समस्या थी जहां अगर मैं इसे स्ट्रिंग "शाब्दिक" <null> "भेजता हूं, तो यह क्रैश हो जाता है! यह कभी पता नहीं लगा सके।}
फेटी

आह - यह बेटे में "<null>" था, जो सेब एक NSNull के रूप में उपयोगी आपूर्ति करता है! : ओ
फेटी

मैंने एक जिस्ट बनाया जहां मैंने इस स्निप के लिए परीक्षण मामलों को जोड़ना शुरू किया। अधिक जोड़ने के लिए स्वतंत्र भरें। gist.github.com/b35097bad451c59e23b1.git
Yevhen ड्युबिनिन

26

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

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

10

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

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

1
मैं इसे asp.net नियमित अभिव्यक्ति सत्यापनकर्ता के लिए बस कॉपी करता हूं;)
वैभव सरन

संपूर्ण, एकमात्र समस्या यह है कि यह पहचान नहीं करता है www.google.com/+gplusname
MuhammadBassio

5

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

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

फिर मैं जांचता हूं कि क्या मिलान किया गया स्टर्लिंग सब्जेक्टस्ट्रिंग के बराबर है और यदि ऐसा है तो url मान्य है :)

अगर मेरा रेक्स गलत है तो मुझे सुधारो;)


मैं गलत हो सकता हूं, लेकिन मेरा मानना ​​है कि regex url को क्वेरी स्ट्रिंग या नामांकित एंकर के साथ मान्य नहीं करता है।
hpique

आप (http | https): // ((http | https): //) * के स्थान पर उपसर्ग भाग को वैकल्पिक बना सकते हैं, लेकिन यह बहुत विस्तृत प्रकार के यूआरएल की अनुमति देगा
Thizzer

4

ताज्जुब है, मुझे वास्तव में यहाँ कोई समाधान नहीं मिला जो बहुत सरल था, फिर भी हैंडलिंग 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];
}

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

@"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://a.b-c.de",
@"http://223.255.255.254"

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

@"",
@"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"

URLs का स्रोत: https://mathiasbynens.be/demo/url-regex


3

आप इस का उपयोग कर सकते हैं यदि आप नहीं करना चाहते हैं 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

यह बहुत दिलचस्प लगता है। क्या यह 100% बुलेट प्रूफ है?
Supertecnoboff

3

लेफकिर के समाधान में एक मुद्दा है। उनका रेगेक्स " http://instagram.com/p/4Mz3dTJ-ra/ " के साथ मेल नहीं खा सकता है । Url घटक ने संख्यात्मक और शाब्दिक चरित्र को संयोजित किया है। उसका रेगेक्स ऐसे उरोजों को विफल करता है।

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

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

2

मुझे ऐसा करने का सबसे आसान तरीका मिल गया है:

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

मैं इसे थोड़ी देर के लिए उपयोग कर रहा हूं और यह ठीक काम करने लगता है। यह नए TLDs ( namecheap.com/domains/new-tlds/explore.aspx ) के साथ भी अच्छा लगता है ।
जूलियनविज

यह निराधार है। यदि आपका URL अमान्य स्ट्रिंग है, तो यह बनाते समय क्रैश हो जाएगा NSURL, ताकि इसके बजाय जाँच की जा सके। और यहां तक ​​कि यह पुराने एपीआई का उपयोग करता है।
लेगलेस जू

@Legoless बस एक कोशिश का उपयोग कर सकता है ... इसके चारों ओर पकड़?
COBB

2

नीचे दिए गए कोड से आपको मान्य URL मिलेंगे

      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 के लिए


1

स्वीकृत उत्तर गलत है। मेरे पास इसमें "-" वाला URL है, और सत्यापन विफल है।


1

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

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


1

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

  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
    }
}

1

स्विफ्ट में URL सत्यापन

विवरण

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]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\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]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\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)
}

परिणाम

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


1

उद्देश्य सी

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

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


0

स्वार्थी रूप से, मैं KSURLFormatterदोनों वैध इनपुट के लिए एक उदाहरण का उपयोग करने का सुझाव दूंगा, और इसे किसी चीज़ में बदल सकता हूं NSURL


क्या इसका कोई iOS फ्लेवर है?
कैपिक्क

यह सिर्फ iOS पर ठीक काम करना चाहिए। यदि यह नहीं है, तो इसे ठीक करें और मुझे एक पुल अनुरोध भेजें, या एक समस्या दर्ज करें
माइक अब्दुल्ला

0

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

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


0

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

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)
  }
}

0
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)
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.