iOS中系统通讯录带过来的电话验证(有坑)

项目中有要输入电话的地方,要求提交的时候进行校验为手机号码。

其实就是特殊处理一下通讯录中带来的带有+86的电话(类似+86 185 xxxx xxxx),然后进行正则匹配。直接上代码。


NSString *telNumber = self.visitorDetailModel.Customer_Tel;

//去除号码中的空格

telNumber = [telNumberstringByReplacingOccurrencesOfString:@" " withString:@""];

if([telNumberhasPrefix:@"+86"]) {//如果号码中带有+86,去除+86

        telNumber = [telNumbersubstringFromIndex:3];

}

if (![GMUtilityTool isMobileNumber:telNumber]){//正则匹配是否为正确的手机号码

UIAlertController *vc = [UIAlertController alertControllerWithTitle:@"提示" message:@"请输入正确的手机号码" preferredStyle:UIAlertControllerStyleAlert];

        UIAlertAction *action = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];

        [vc addAction:action];

        [self presentViewController:vc animated:YES completion:nil];

}


//判断是否为正确的手机号码的正则

+ (BOOL)isMobileNumber:(NSString*)mobileNum

{

    NSString *phoneRegex = @"^1[3456789]\\d{9}$";

    NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];

    return [phoneTestevaluateWithObject:mobileNum];

}


OK,基本上面这样就完事了。但是最近有用户在用的时候反馈输了正确的11位号码,还是不通过,依旧提示请输入正确的手机号码,并且测试也没测出来。

测试认为有空格存在,我说我处理了空格,不可能有问题的,反复复制粘贴过来带空格的号码试验,依旧没事。

最后反复试了所有的可能之后,发现从系统通讯录带过来的带有+86的号码(类似+86 185 xxxx xxxx)的不能通过,所以我怀疑这里面的空格并不是我们平时手动输入的空格。

用打印地址的方式进行了验证

我们可以看到后面两个手输的空格地址一样,但是第一个从电话里粘贴过来的“空格”地址却不一样。这货是一个长的跟空格一样的其他字符。

。。。。。。

没办法在代码处多加了一行


//去除手动输入的空格

telNumber = [telNumberstringByReplacingOccurrencesOfString:@" " withString:@""];

//去除通讯录带来的坑逼"空格"

telNumber = [telNumberstringByReplacingOccurrencesOfString:@" " withString:@""];

你可能感兴趣的:(iOS中系统通讯录带过来的电话验证(有坑))