2011-05-11 3 views
6

간단한 NSString 문장에서 URL을 가져 오려고합니다. 이를 위해 다음 코드에서 NSDataDetector를 사용합니다.NSTextCheckingTypeLink가있는 NSDataDetector가 URL과 PhoneNumbers를 감지합니다!

NSString *string = @"This is a sample of a http://abc.com/efg.php?EFAei687e3EsA sentence with a URL within it and a number 097843."; 
NSDataDetector *linkDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil]; 
NSArray *matches = [linkDetector matchesInString:string options:0 range:NSMakeRange(0, [string length])]; 

for (NSTextCheckingResult *match in matches) { 

    if ([match resultType] == NSTextCheckingTypeLink) { 
    NSString *matchingString = [match description]; 
    NSLog(@"found URL: %@", matchingString); 
    } 
} 

그 결과 URL과 번호를 찾습니다. 번호가 전화 번호로 감지되었습니다. 번호 :

found URL: http://abc.com/efg.php?EFAei687e3EsA 
found URL: tel:097843 

버그입니까? 아무도 그 전화 번호없이 URL을 얻는 방법을 말해 줄 수 있습니까?

+0

은 그것을 얻었다! 전화 번호가 표시되지 않게하려면 처음 7자를 확인합니다. NSString * httpString = [aString substringWithRange : NSMakeRange (0,7)]; if ([httpString isEqualToString : @ "http : //"]) { // 내 코드 } – user689081

+0

전화 번호 확인을위한 NSTextCheckingTypePhoneNumber라는 또 다른 NSTextCheckingType이 있기 때문에 정말 이상합니다. – an0

답변

12

NSDataDetector은 전화 통화를 시작하거나 문자 메시지를 시작하기 위해 누른 상태로 유지하기 위해 전화기에서 링크 인 것처럼 탭할 수 있기 때문에 반드시 전화 번호를 링크로 감지합니다. 현재 로케일 (즉, NSLocale)은 숫자 문자열이 전화 번호와 같은지 아닌지를 결정합니다. 예를 들어 미국의 전화 번호는 \d{3}-\d{4}이므로 전화 번호로 인식 되려면 적어도 7 자리 숫자가 필요합니다.

전화 링크와 다른 링크를 인식하는 경우 URL 시작 부분에 http://을 확인하는 것은 좋지 않습니다. 간단한 예가 충분합니다. https:// 링크 인 경우 어떻게해야합니까? 그런 다음 코드가 손상됩니다.

이렇게 될 것이다이를 확인하는 더 좋은 방법 :

좋아
NSArray *matches = [linkDetector matchesInString:string options:0 range:NSMakeRange(0, [string length])]; 

for (NSTextCheckingResult *match in matches) { 
    NSURL *url = [match URL]; 
    if ([[url scheme] isEqual:@"tel"]) { 
    NSLog(@"found telephone url: %@", url); 
    } else { 
    NSLog(@"found regular url: %@", url); 
    } 
} 
+0

전화 번호를 감지하는 NSTextCheckingTypeLink의 동작은 실제로 이상합니다. 5 ~ 6 자리 숫자 만 감지하지만 888-6666과 같은 실제 전화 번호는 감지하지 못합니다. 왜 그런지 알아? 또는 알려진 버그입니까? – an0

+0

나에게 버그처럼 보입니다 ...이 동작은 iOS7에서 사라졌습니다. – ahalls