iOS开发实战之文本中提取手机号、坐机号

        最近在接触一家客户的时候,发现一个较有意思的需求。前端业务逻辑对用户进行文本提示的时候,需要提示后端返回的文本信息。如果文本信息中电话号码(手机或者座机),则提示拨打电话号码 ,如果没有电话号码,则直接提示相应的文本就可以。考试到后台是人工录入提示信息,那他很可能会录入多个电话号码,并且号码之间是允许出现‘-’字符的。

比如文本信息为:

如果您在使用过程中有任何会籍问题,请拨打:029-88889999。如果您在预订过程中有任何问题,请拨打029-76895432。祝您使用愉快。

        这就涉及到一个问题,如何从指定的文本信息中提取出所有的电话号码?并且电话号码的位置不是固定的,完全是人工组织录入。

        所以,就不得不对于文本进行循环处理,将连续的数字拼接在一起,直到遇到非数字的字符时,则停止拼接,这个时候对于取出来的当前数字进行电话号码验证,如果是,则将其放在数组中。然后将探测字符串置空继续循环。

        以上就是主体思路,下面给出相应的代码示例:

iOS开发实战之文本中提取手机号、坐机号

代码的大体分析:

phone参数即为在循环过程将连续的数字拼接在一起,如果发现下一位不是数字时,则停止拼接继而进行电话号码的正则验证,如果是电话号码则保存到数组中。文本遍历循环结束后,将此数组返回即可。

这里提供对于电话号码的正则验证教程:https://blog.****.net/yunhuaikong/article/details/106213003

以上述提示文本信息为模板,经过处理后,得出来的电话号码数组为如下所示。这里说一下,我是将此方法封装为NSString的类方法的。你怎么封装的怎么调用。

callPhoneScreenAction方法也是我封装的拨打电话的方法,内部是调用展示UIActionSheet控件而已,有多少个电话号码 就展示多个行,点击哪行,就调用telprompt://拨打电话就是了。此处就不赘述了。

iOS开发实战之文本中提取手机号、坐机号

因为正在开发一个电子阅读器的APP,所以,就借用这个页面向大家展示效果了。

iOS开发实战之文本中提取手机号、坐机号

当然,如果你会点 javascript、php、.net等的话,在其环境中进行封装也是完全可以实现如上提取效果的。这里只是使用OC给出一个实现的思路而已,并没有什么高深的算法支撑。再稍加修改,就可以实现提取大文本中的所有数字、给定字符等,就看你的技能是否达到这个层次了,达到了,以上纯粹是抛砖引玉的功能。达不到,就没办法了引申出更多的变种了。