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

最近项目有点忙,好久都没有来更新博客了,俗话说好记性不如个烂笔头。今天也是抽出了一点时间来更新一下博客,来记录一下在自己在开发中遇到的坑,希望能帮到你。

读取通讯录实现

iOS9之前

AddressBookUI、AddressBook

iOS9以后

苹果爸爸在iOS 9之后更新了新的框架ContactsUI、Contacts

今天我们就不说实现的方法了,想必大家都知道怎么实现我就不多啰嗦了,我们今天来探讨一下iOS 11.0通讯录手机号“空格”bug。

进入正题之前我们还是说一下事情的缘由,这一天我依旧向往常一样,在制造bug和修改bug的道路上忙碌着。测试的小姐姐有点不淡定的跟我我说不能话费充值。纳尼... 刚才做了一笔还是OK的这就倒下了.... 呃呃呃 ,立马我自己又是试了一下 NIMA竟然能行,查看了一下上送报文才发现手机号有“空格”。呵呵 那就 替换一下stringByReplacingOccurrencesOfString:@"-" withString:@""
什么鬼 没有作用。

我试着将手机号转成utf8编码打印看了一下


iOS 11读取通讯录手机号“空格”bug_第1张图片
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 11读取通讯录手机号“空格”bug)