iPhone에서 URL을 확인하는 방법


90

제가 개발중인 iPhone 앱에는 URL을 입력 할 수있는 설정이 있습니다. 형식과 기능 때문에이 URL은 오프라인뿐 아니라 온라인에서도 유효성을 검사해야합니다.

지금까지 URL의 유효성을 검사하는 방법을 찾을 수 없었으므로 문제는 다음과 같습니다.

iPhone (Objective-C)의 URL 입력을 온라인과 오프라인에서 어떻게 확인합니까?


그의 대답에 대한 의견을 읽으면 유효성 검사가 올바르게 작동하지 않습니다.
Thizzer

답변:


98

이 게시물 덕분에 RegexKit 사용을 피할 수 있습니다. 내 솔루션은 다음과 같습니다 (iOS> 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];
}

Swift에서 내 솔루션을 확인하려면 아래에 나와 있습니다.

 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을 작동 " webr.ly "과 같은 매개 변수를 URL에 대한 작업을하지 않는 youtube.com/watch?v=mqgExtdNMBk
유용한

5
((http|https)://)?((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+". http : // 또는 https : //를 선택해야합니다.
Yeung의

google.com, www.google.com 및 //www.google.com에서도 작동하지 않음
Revinder 2014 년

내 경우에는 다음 URL이 작동하지 않습니다. money.cnn.com/2015/10/19/technology/apple-app-store/…
DJtiwari

@DJtiwari +1 예 작동하지 않습니다. 수정 사항을 찾았습니까?
Hamza MHIRA 2015

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을 준수해야합니다.이 메소드는 RFC 1738 및 1808에 따라 URLString을 구문 분석합니다.

반환 값

URLString으로 초기화 된 NSURL 개체입니다. 문자열 형식이 잘못된 경우 nil을 반환합니다.


1
나는 여기에있는 다른 사람들 중 일부에 동의합니다. 이것은 정규 표현식을 조작하는 훨씬 더 나은 솔루션입니다. 이것은 정확하게 확인 된 답변이어야합니다.
Diego Barros 2012

1
@MrThys-이것이 포착하지 못하는 잘못된 URL의 예를 제공 할 수있는 기회가 있습니까? 알아두면 좋을 텐데 .. 지금까지 훌륭한 솔루션 인 것 같습니다.
Don Vaughn 2012

7
@DonamiteIsTnt URL http://www.aol.comhttp://www.nytimes.com이이 테스트를 통과했습니다.
Aaron Brager 2012

1
코드는 잘못된 URL을 확인하지 않습니다. 예 : <code> afasd </ code >, URL은 여전히 ​​테스트를 통과합니다
2013 년

39
문서가 잘못되었습니다. 몇 가지 테스트를 작성합니다. NSURL@ "# @ # @ $ ## % $ # $ #"또는 @ "tp : / fdfdfsfdsf"문자열을 전달할 때 nil을 반환하지 않습니다. 따라서이 방법은 유효한 HTTP URL 등을 확인하는 데 쓸모가 없습니다.
Tony Arnold

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>"문자열을 보내면 충돌하는 이상한 문제가있었습니다! 그것을 알아낼 수 없었다}.
Fattie

아-애플이 NSNull로 유용하게 공급하는 아들의 "<null>"이었습니다! : O
Fattie 2014-10-24

이 부분에 대한 테스트 케이스를 추가하기 시작한 요점을 만들었습니다. 더 추가하려면 자유롭게 입력하세요. gist.github.com/b35097bad451c59e23b1.git
예븐 두비 닌

26

Swift를 사용한 내 솔루션 :

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 정규 표현식 검증을 위해 그것을 복사)
하기 Vaibhav 사란

완벽, 유일한 문제는 인식하지 않는다는 것입니다www.google.com/+gplusname
MuhammadBassio

5

RegexKit을 사용하여 문제를 해결하고 URL의 유효성을 검사하는 빠른 정규식을 빌드했습니다.

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

그런 다음 matchedString이 subjectString과 같은지 확인하고이 경우 URL이 유효한지 확인합니다. :)

내 정규식이 잘못된 경우 정정하십시오.)


내가 틀렸을 수도 있지만 정규식이 쿼리 문자열이나 명명 된 앵커로 URL의 유효성을 검사하지 않는다고 생각합니다.
hpique 2010

(http | https) : //를 ((http | https) : //) *로 대체하여 접두사 부분을 선택적으로 만들 수 있지만 이렇게하면 매우 다양한 URL이 허용됩니다
Thizzer 2011-08-15

4

이상하게도 저는 여기서 매우 간단한 해결책을 찾지 못했지만 여전히 처리 http/ https링크에 대해 괜찮은 작업을 수행했습니다 .

이것은 완벽한 해결책은 아니지만 아래의 경우에 효과적입니다. 요약하면 정규식은 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에 대해 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"

URL 출처 : 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

Lefakir의 솔루션에는 한 가지 문제가 있습니다. 그의 정규식은 " http://instagram.com/p/4Mz3dTJ-ra/ " 와 일치 할 수 없습니다 . Url 구성 요소에는 숫자와 리터럴 문자가 결합되어 있습니다. 그의 정규식은 이러한 URL을 실패합니다.

여기 내 개선이 있습니다.

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

2

이 작업을 수행하는 가장 쉬운 방법은 다음과 같습니다.

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

나는 한동안 그것을 사용하고 있으며 잘 작동하는 것 같습니다. 또한 새로운 TLD ( namecheap.com/domains/new-tlds/explore.aspx ) 와 잘 어울리는 것 같습니다 .
julianwyz

이것은 무의미합니다. URL이 유효하지 않은 문자열 인 경우를 만드는 동안 충돌이 발생 NSURL하므로 대신 확인할 수 있습니다. 그럼에도 불구하고 오래된 API를 사용합니다.
Legoless 2016-06-05

@Legoless는 try ... catch를 사용할 수 있습니까?
COBB


1

승인 된 답변이 잘못되었습니다. "-"가 포함 된 URL이 있는데 유효성 검사가 실패합니다.


1

G + 링크 지원에 대한 Tweeked Vaibhav의 답변 :

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

Swift의 URL 유효성 검사

세부

Xcode 8.2.1, Swift 3

암호

열거 형 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

목표 C

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

사용자가 입력 한 것이 URL인지 확인하려고 했습니까? 문자열이 포함 된 경우는 예를 들어 검사에, 정규 표현식으로 간단하게 할 수 있습니다 www.(이 야후 메신저를 확인하는 방식이다 사용자 상태가 링크인지 아닌지)
도움이되기를 바랍니다


0

이기적으로는 KSURLFormatter인스턴스를 사용하여 입력의 유효성을 검사하고 NSURL처리 할 수 있는 것으로 변환하는 것이 좋습니다 .


이것의 iOS 풍미가 있습니까?
capikaw

iOS에서 잘 작동합니다. 그렇지 않으면 문제를 해결하고 나에게 pull request를 보내거나 문제를 제출하십시오
Mike Abdullah

0

정규식 문자열을 사용하여 모든 종류의 유효성 검사를 처리 할 수있는 상속 된 UITextField 클래스를 만들었습니다. 여기서는 모든 정규식 문자열을 순서대로 제공하고 유효성 검사가 실패 할 때 표시 할 메시지를 제공하면됩니다. 내 블로그에서 더 많은 정보를 확인할 수 있습니다. 정말 도움이 될 것입니다.

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


0

@Anthony의 답변을 신속하게 확장 String하여 선택 사항을 반환하는 범주를 작성했습니다 NSURL. 반환 값 은를 URL로 확인할 수없는 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)
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.