我正在尝试从一个简单的NSString语句中获取一个网址。为此,我在以下代码中使用了NSDataDetector:
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那是个bug吗?谁能告诉我没有那个电话号码怎么获取URL?
发布于 2011-05-12 00:04:55
NSDataDetector必须将电话号码检测为链接,因为在电话上,您可以轻触它们,就好像它们是一个链接,以便发起电话呼叫(或轻拍并按住以发起文本消息等)。我认为当前的语言环境(即NSLocale)决定了一串数字看起来是否像电话号码。例如,在美国,至少需要七位数字才能被识别为电话号码,因为在美国,数字的一般形式是:\d{3}-\d{4}。
至于识别一个电话链接与另一个链接,在网址的开头检查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);
}
}https://stackoverflow.com/questions/5965844
复制相似问题