умно распознавать телефонные номера и текст (включая международные номера) - PullRequest
0 голосов
/ 27 марта 2012

Я пытаюсь создать приложение, которое позволит вам перейти к определенному приложению для соответствующего приложения (в частности, обычные веб-ссылки переходят в Safari, ссылки YouTube переходят в YouTube, ссылки Google map переходят в приложение Maps, строки текст отправляется в приложение Notes, а телефонные номера - в контакты (для любого устройства iOS, кроме iPhone) или в приложение Phone. Все данные просматриваются в табличном представлении.

На данный момент у меня есть NSMutableArray, который содержит несколько фиктивных данных (в частности, по одному для каждого типа данных). Я успешно справился с веб-ссылкой, ссылкой на YouTube и ссылкой на карты Google. Вопрос в том, что я не знаю, как заставить его распознавать национальные и международные номера телефонов.

Вот данные NSMutableArray:

NSMutableArray *sites = [[NSMutableArray alloc] initWithObjects:@"http://www.apple.com/", @"http://www.youtube.com/watch?v=QH2-TGUlwu4", @"http://maps.google.com/maps?saddr=CN+Tower&daddr=1+Yorkdale+Road+%23500,+Toronto,+ON+M6A+2T9,+Canada+(Yorkdale+Shopping+Centre)&hl=en&sll=43.68515,-79.422475&sspn=0.133818,0.308647&geocode=FdzumQIdjqBE-yGBdRzexNjtFQ%3BFUk0mwIdOp1D-yG5Hg9iD9hImQ&vpsrc=0&t=w&mra=ls&z=12", @"This is a test", @"(416)-555-5555", nil];

Кроме того ...

self.cloudsendList = sites;

Вот код, который у меня есть на данный момент, когда пользователь нажимает на ячейку табличного представления:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat: @"%@", [cloudsendList objectAtIndex:indexPath.row]]]];
}

Я не знаю, нужно ли мне делать это с большим количеством строк кода, но возможно ли это? И если это так, как бы вы смогли это сделать? Если вы хотите увидеть больше кода, чтобы понять, то я могу с удовольствием опубликовать соответствующую информацию. Я надеюсь, что я не доставил слишком много хлопот, но я надеюсь, что вы могли бы помочь мне. Я прошу прощения, если это звучит как полный нуб. Заранее спасибо! :)

Ответы [ 3 ]

2 голосов
/ 27 марта 2012

У меня такое ощущение, что, поскольку Apple уже решила это в детекторах данных UITextView, вероятно, было бы лучше использовать их решение. Обнаружение / форматирование телефонных номеров общего назначения очень сложно реализовать (даже Apple не идеален), и вы, вероятно, потратите много времени на очень хрупкое решение.

Я бы предложил добавить UITextView в UITableViewCell contentView (правильно отформатирован и отформатирован) и убедиться, что обнаружение данных включено.

1 голос
/ 27 марта 2012

Вместо того, чтобы бросать свой собственный, извлекайте Класс Apple NSDataDetector . Я на 99% уверен, что этот класс использует кучу регулярных выражений, но преимущество в том, что он выдержал гораздо больше испытаний, чем вы когда-либо могли разумно сделатьсами.

0 голосов
/ 27 марта 2012

Вы захотите использовать регулярные выражения. Это единственный способ сделать это правильно. Вот индекс многих из них.

http://regexlib.com/DisplayPatterns.aspx?categoryId=7&cattabindex=6&AspxAutoDetectCookieSupport=1

Я не уверен, что вы сможете обнаружить все страны одним регулярным выражением. Возможно, вам придется сделать несколько проходов, чтобы провести их все.

Итак, прокрутите все ваши данные, сохраните совпадения для этого куска данных, а затем вызовите URL с этими данными. Конечно, вы знаете, как, если / еще в obj c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...