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