美文网首页
iOS中系统通讯录带过来的电话验证(有坑)

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

作者: xIang丶7 | 来源:发表于2018-04-27 14:22 被阅读0次

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

    其实就是特殊处理一下通讯录中带来的带有+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中系统通讯录带过来的电话验证(有坑)

          本文链接:https://www.haomeiwen.com/subject/blvblftx.html