IOS从通讯录拷贝的电话号码带有不可见字符的bug

41 阅读1分钟

背景

有一个新增仓库输入框,客户新建仓库时把仓库负责人手机号+地址作为仓库名称。 系统禁止相同的仓库名称。

由于从IOS11 通讯录中拷贝的电话号码是有空格分割的,拷贝时可能带有【双向文本uniCode控制字符】;

去掉拷贝空格分割

function trimAll(str) {
   //15200009999
  return str.replace(/\s*/g, '');
}

bug出现

IOS11.2中,空格已经去掉了,但是校验时,还是通不过。说明这个看起来干净的号码中一定含有不可见的字符。

验证:
'‭15200009999‬'.length === 13

Unicode转码:\u202d15200009999\u202c 前后出现uniCode编码字符;

解决方案

对填写的仓库名称进行uniCode编码字符进行替换

function trimAll(str) {
  return str.replace(/[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069\s]*/g, '');
}