আইফোনটিতে কীভাবে একটি ইউআরএল বৈধ করবেন


90

আমি যে আইফোন অ্যাপ্লিকেশনটি বিকাশ করছি তাতে একটি সেটিং রয়েছে যাতে আপনি কোনও ইউআরএল প্রবেশ করতে পারেন, ফর্ম এবং ফাংশনটির কারণে এই ইউআরএলটি অনলাইনের পাশাপাশি অফলাইনেও বৈধ হওয়া প্রয়োজন।

এখনও পর্যন্ত আমি ইউআরএলটি যাচাই করার জন্য কোনও পদ্ধতি খুঁজে পাইনি, সুতরাং প্রশ্নটি হল;

আমি অনলাইনের পাশাপাশি অফলাইনে আইফোনে (উদ্দেশ্য-সি) কোনও ইউআরএল ইনপুট কীভাবে যাচাই করব?


তার উত্তরে মন্তব্যগুলি পড়ুন, বৈধতা সঠিকভাবে কাজ করে না।
থিজার

উত্তর:


98

এই পোস্টের জন্য ধন্যবাদ , আপনি 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];
}

আপনি যদি নীচে দেওয়া আমার সমাধানটি সুইফটে চেক করতে চান:

 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
এটি কেবল " ওয়েবআরলি " টাইপের url এর জন্য কাজ করে youtube.com/watch?v=mqgExtdNMBk- এর
ইউএসইউফুএল

4
((http|https)://)?((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+".এটি http: // বা https: // করা উচিত অনুকূল।
ইয়েং

google.com, www.google.com এবং //www.google.com- এর জন্যও কাজ করছেন না
পুনর্নির্মাণ

নিম্নলিখিত url আমার ক্ষেত্রে কাজ করছে না। money.cnn.com/2015/10/19/technology/apple-app-store/…
ডিজেটিওয়ারি

@ ডিজেটিওয়ারি +1 হ্যাঁ এটি কাজ করছে না আপনি কি এর জন্য কোনও সমাধান খুঁজে পেয়েছেন?
হামজা MHIRA

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

অ্যাপলের ডকুমেন্টেশন অনুসারে:

ইউআরএলউইথ স্ট্রিং: সরবরাহ করা স্ট্রিংয়ের সাহায্যে একটি এনএসআরএল অবজেক্ট তৈরি করে এবং ফেরত দেয়।

+ (id)URLWithString:(NSString *)URLString

পরামিতি

URLString: এনএসআরএল অবজেক্টটি আরম্ভ করার জন্য স্ট্রিং। আরএফসি 2396 এর সাথে সঙ্গতিপূর্ণ হতে হবে This এই পদ্ধতিটি আরএফসি 1738 এবং 1808 অনুযায়ী URL স্ট্রিংকে পার্স করে p

ফেরত মূল্য

একটি এনএসআরএল অবজেক্ট ইউআরএলআর স্ট্রিং দিয়ে সূচনা করা হয়েছে। যদি স্ট্রিংটি ত্রুটিযুক্ত ছিল তবে শূন্য হবে।


4
আমি এখানে অন্য কারও সাথে একমত। এটি একটি আরও ভাল সমাধান যা নিয়মিত প্রকাশের সাথে ঘুরে বেড়ায়। এটি সঠিকভাবে পরীক্ষিত উত্তর হওয়া উচিত।
ডিয়েগো ব্যারো

4
@ মিঃটিইসস - আপনি যে কোনও বিকৃত ইউআরএল ধরেন না তার উদাহরণ সরবরাহ করতে পারে এমন কোনও সুযোগ? জানতে পেরে দুর্দান্ত লাগবে .. এখনও পর্যন্ত একটি দুর্দান্ত সমাধান বলে মনে হচ্ছে।
ডন ভন

7
@ দোনামাইটআইএসটিএনটি ইউআরএল http://www.aol.comhttp://www.nytimes.comএই পরীক্ষাটি পাস করে।
অ্যারন ব্র্যাজার

4
কোডটি ত্রুটিযুক্ত ইউআরএল পরীক্ষা করবে না। উদাহরণস্বরূপ : <কোড> আফস </ কোড >, ইউআরএল এখনও পরীক্ষায় উত্তীর্ণ হবে
ড্যানিল

39
দস্তাবেজগুলি ভুল। কয়েকটি পরীক্ষা লিখুন - NSURLআমি যখন "" # # # # @ $ ##% $ # $ # ", বা @" tp: / fdfdfsfdsf "এর স্ট্রিং পাস করি তখন শূন্য হয় না। সুতরাং এই পদ্ধতিটি বৈধ এইচটিটিপি ইউআরএল এবং এর মতো পরীক্ষা করার জন্য অকেজো হবে।
টনি আর্নল্ড

32

আপনার নিজের নিয়মিত ভাব প্রকাশের পরিবর্তে অ্যাপলের উপর নির্ভর করুন। স্ট্রিংয়ের মধ্যে একটি লিঙ্কের উপস্থিতি পরীক্ষা করার জন্য আমি 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>" ছিল, যা অ্যাপল কার্যকরভাবে এনএসএন হিসাবে সরবরাহ করে! : ও
ফ্যাটি

আমি একটি সংক্ষিপ্তসার তৈরি করেছি যেখানে আমি এই স্নিপডের জন্য পরীক্ষার কেস যুক্ত করতে শুরু করেছি। আরও যোগ করতে নিখরচায় পূরণ করুন। gist.github.com/b35097bad451c59e23b1.git
ইয়েভেন

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;=]*)?";

4
আমি এপিকেটটি কেবল এসপ নেট নিয়মিত অভিব্যক্তি বৈধকারীর জন্য অনুলিপি করেছি;)
বৈভব শরণ

নিখুঁত, একমাত্র সমস্যাটি এটি স্বীকৃতি দেয় নাwww.google.com/+gplusname
মুহাম্মদবাসিও

5

আমি RegexKit ব্যবহার করে সমস্যার সমাধান করেছি এবং একটি ইউআরএলকে বৈধতা দেওয়ার জন্য একটি দ্রুত রেইগেক্স তৈরি করেছি;

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

তারপরে আমি পরীক্ষা করে দেখছি যে ম্যাচডস্ট্রিং সাবজেক্ট স্ট্রিংয়ের সমান এবং সে ক্ষেত্রে যদি ইউআরএলটি বৈধ হয় তবে :)

আমার রেজেক্স ভুল হলে আমাকে সংশোধন করুন;)


আমি ভুল হতে পারি, তবে আমি বিশ্বাস করি যে রেজেক্স কোয়েরি স্ট্রিং বা নামযুক্ত অ্যাঙ্কর সহ ইউআরএলকে বৈধতা দেয় না।
এইচপিফিক

আপনি (HTTP | https): // এর সাথে (HTTP | https): //) প্রতিস্থাপন করে উপসর্গ অংশটি
makeচ্ছিক করে তুলতে পারেন তবে

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

এই ইউআরএলগুলির বিরুদ্ধে ভ্যালিড পরীক্ষিত:

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

এই ইউআরএলগুলির বিরুদ্ধে 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


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% বুলেট প্রুফ?
সুপারটেকনোবফ

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

আমি এটি কিছুক্ষণের জন্য ব্যবহার করছি এবং এটি ঠিকঠাক কাজ করে বলে মনে হচ্ছে। এটি নতুন টিএলডি ( namecheap.com/domains/new-tlds/explore.aspx ) এর সাথেও দুর্দান্ত খেলবে বলে মনে হচ্ছে ।
জুলিয়ানওয়াইজ

এটি অর্থহীন। আপনার URL টি যদি অবৈধ স্ট্রিং থাকে তবে এটি তৈরি করার সময় ক্রাশ হবে NSURL, যাতে এটির পরিবর্তে এটি পরীক্ষা করা যায়। এবং এমনকি এটি পুরানো এপিআই ব্যবহার করে।
লেগোসলে

@ লেগোলেস কেবল একটি চেষ্টা ব্যবহার করতে পারে ... এটি চারপাশে ধরা?
সিওবিবি

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

যেমন ইউআরএল জন্য


1

অনুমোদিত উত্তরটি ভুল। আমার এতে একটি "-" সহ একটি ইউআরএল রয়েছে এবং বৈধতা ব্যর্থ হয়।


1

জি + লিঙ্কগুলিকে সমর্থন করার জন্য বৈভবের উত্তরটি টুইট করেছেন:

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

সুইফটে ইউআরএল বৈধতা

বিশদ

এক্সকোড 8.2.1, সুইফট 3

কোড

এনআরএল ইউআরএল শেমিস: স্ট্রিং

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হ্যান্ডেল করতে পারে কিছু রূপান্তর ।


এটির কোনও আইওএস গন্ধ নেই?
ক্যাপিকা ওয়া

এটি আইওএসে ঠিক কাজ করা উচিত। যদি তা না হয় তবে এটিকে ঠিক করুন এবং আমাকে একটি টানার অনুরোধ প্রেরণ করুন বা একটি ফাইল দাখিল করুন
মাইক আবদুল্লাহ

0

আমি ইউআইটিেক্সটফিল্ডের উত্তরাধিকার সূত্রে প্রাপ্ত বর্গ তৈরি করেছি যা রেজেক্স স্ট্রিং ব্যবহার করে সমস্ত ধরণের বৈধতা পরিচালনা করতে পারে। এর মধ্যে আপনাকে কেবল তাদের ক্রিয়াকলাপের সমস্ত রেজেক্স স্ট্রিং প্রদান করতে হবে এবং যাচাইকরণ ব্যর্থ হওয়ার পরে আপনি তাদের প্রদর্শন করতে চান এমন বার্তা। আপনি আরও তথ্যের জন্য আমার ব্লগটি চেক করতে পারেন, এটি আপনাকে সত্যই সহায়তা করবে

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


0

@ অ্যান্টনির উত্তরটি সুইফটে প্রসারিত করে আমি একটি বিভাগ লিখেছিলাম Stringযার উপরে একটি alচ্ছিক প্রত্যাবর্তন ঘটে 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)
  }
}

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

0

সুইফট 5 এ আমার সমাধান:

extension String {
    func isValidUrl() -> Bool {
        do {
            let detector = try NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)
            // check if the string has link inside
            return detector.numberOfMatches(in: self, options: [], range: .init( location: 0, length: utf16.count)) > 0
        } catch {
            print("Error during NSDatadetector initialization \(error)" )
        }
        return false
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.