我试图从一个简单的NSString句子获取一个URL.为此,我在以下代码中使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
结果是它找到了URL和数字.该号码被检测为电话号码:
found URL: http://abc.com/efg.php?EFAei687e3EsA
found URL: tel:097843
Run Code Online (Sandbox Code Playgroud)
那是一个错误吗?谁能告诉我如何获得没有该电话号码的URL?
Dav*_*ong 12
NSDataDetector必须将电话号码检测为链接,因为在电话上,您可以点击它们,就好像它们是链接一样,以便发起电话呼叫(或点击并按住以发起短信等).我相信当前的语言环境(即NSLocale)确定一串数字是否与电话号码相似.例如,在美国,将至少七位数字识别为电话号码,因为美国的数字具有以下一般形式:\d{3}-\d{4}.
至于识别电话链接与另一个链接,http://在URL的开头检查是不是一个好主意.一个简单的例子就足够了:如果它是一个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);
}
}
Run Code Online (Sandbox Code Playgroud)