iOS|iOS 11读取通讯录手机号“空格”bug

最近项目有点忙,好久都没有来更新博客了,俗话说好记性不如个烂笔头。今天也是抽出了一点时间来更新一下博客,来记录一下在自己在开发中遇到的坑,希望能帮到你。
读取通讯录实现 iOS9之前 AddressBookUI、AddressBook
iOS9以后 苹果爸爸在iOS 9之后更新了新的框架ContactsUI、Contacts

今天我们就不说实现的方法了,想必大家都知道怎么实现我就不多啰嗦了,我们今天来探讨一下iOS 11.0通讯录手机号“空格”bug。
进入正题之前我们还是说一下事情的缘由,这一天我依旧向往常一样,在制造bug和修改bug的道路上忙碌着。测试的小姐姐有点不淡定的跟我我说不能话费充值。纳尼... 刚才做了一笔还是OK的这就倒下了.... 呃呃呃 ,立马我自己又是试了一下 NIMA竟然能行,查看了一下上送报文才发现手机号有“空格”。呵呵 那就 替换一下stringByReplacingOccurrencesOfString:@"-" withString:@""
什么鬼 没有作用。
我试着将手机号转成utf8编码打印看了一下

iOS|iOS 11读取通讯录手机号“空格”bug
文章图片
1523007154912.jpg %C2%A0 问题就在这里这根本就不是一个空格,我们都知道utf8格式下空格是要被装换成%20。问题找到了,接下来就是如何处理这个问题了。很简单 我们只需要将非数字的其它字符给过滤掉就行了。
这里提供两种简单的实现方式
  • 正则
- (NSString *)phoneNumberFormat:(NSString *)phoneNum{ NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:@"[^\\d]" options:0 error:NULL]; phoneNum = [regular stringByReplacingMatchesInString:phoneNum options:0 range:NSMakeRange(0, [phoneNum length]) withTemplate:@""]; return phoneNum; }

  • 字符串拼接
- (NSString *)phoneNumberFormat:(NSString *)phoneNum{ NSString *tempStr = @""; for (int i = 0; i < phoneNum.length; i++){ unichar _char = [phoneNum characterAtIndex:i]; if (_char <= '9' && _char >= '0'){ tempStr = [NSString stringWithFormat:@"%@%c",tempStr,_char]; } } return tempStr; }

【iOS|iOS 11读取通讯录手机号“空格”bug】到此问题解决,希望能够帮到你。

    推荐阅读