智能识别电话号码和文字(包括国际号码)
Posted
技术标签:
【中文标题】智能识别电话号码和文字(包括国际号码)【英文标题】:smartly recognize phone numbers and text (international numbers included) 【发布时间】:2012-03-26 23:13:14 【问题描述】:我正在尝试创建一个应用程序,允许您转到某个应用程序以获取适当的应用程序(具体来说,常规网络链接转到 Safari,YouTube 链接转到 YouTube,Google 地图链接转到地图应用程序,行文本发送到 Notes 应用,电话号码发送到联系人(适用于 iPhone 以外的任何 ios 设备)或电话应用。所有数据都在表格视图中查看。
现在,我有一个 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]]]];
我不知道我是否必须使用大量代码来执行此操作,但是,这可能吗?如果是,你将如何完成它?如果使用需要查看更多代码以便理解,那么我很乐意发布相关信息。我希望我没有造成太大的麻烦,但我希望你能帮助我。如果这听起来像个菜鸟,我深表歉意。提前致谢! :)
【问题讨论】:
【参考方案1】:我的感觉是,由于 Apple 已经在 UITextView 的数据检测器中解决了这个问题,因此最好使用他们的解决方案。通用电话号码检测器/格式化程序很难实现(即使 Apple 也不完美),您可能会在一个非常脆弱的解决方案上花费大量时间。
我建议将 UITextView 添加到 UITableViewCell contentView(大小和格式正确)并确保数据检测已打开。
【讨论】:
好的。那么,与我目前拥有的代码相比,代码会是什么样子呢?只是为了让您知道,必须选择包含信息的 tableviewcell,而不是文本本身。 将 UITextView 设置为 editable=NO。文本变成了网页上的链接,它会自动做正确的事情。这是最容易上手的,但您可能不喜欢这种视觉风格。 嗯……NSPredicate 呢?你会推荐吗? 如果这个作品给了 Derrick 荣誉。查看此问题的第二个答案:***.com/questions/4590440/… 这正是我需要的!谢谢你。 :)【参考方案2】:结帐Apple's NSDataDetector class,而不是自己滚动。我 99% 肯定这个类使用了一堆正则表达式,但好处是它经受了比你自己合理地做的更多的测试。
【讨论】:
【参考方案3】:你会想要使用正则表达式。这是正确执行此操作的唯一方法。这是其中许多的索引。
http://regexlib.com/DisplayPatterns.aspx?categoryId=7&cattabindex=6&AspxAutoDetectCookieSupport=1
我不确定您是否能够使用一个正则表达式检测所有国家/地区。您可能需要多次通过才能扫描所有这些。
因此,清理所有数据,存储该数据块的匹配项,然后使用该数据调用 url。你肯定知道如何在 obj c 中设置 if/else。
【讨论】:
好的,假设它识别英国号码 (^(\+44\s?7\d3|(?07\d3)?)\s?\d 3\s?\d3$) 和美国/加拿大数字仅 (^(1?(-?\d3)-?)?(\d3)(-?\d4 )$),就我目前拥有的代码而言,代码看起来如何。我想我需要使用“if”语句,并且我知道我需要使用“tel:”。 不确定在objective-c中到底如何 试试这个。我无法从您的代码中真正看出发生了什么。 ***.com/questions/422138/… 好的。感谢你们对我的帮助。我真的很感激。以上是关于智能识别电话号码和文字(包括国际号码)的主要内容,如果未能解决你的问题,请参考以下文章