最近项目线上问题,造成问题的原因:

应用的用户信息界面需要输入手机号码,该用户就把自己电话簿里的手机号码进行复制(copy)之后,把复制的内容粘贴在我们页面的输入框里,一切都很完美,但点用户击保存后,却显示弹框“请输入正确的手机号”,于是用户就立马截图帮助(投诉了)我们改进bug,还加了句每次必现。

分析原因:

从用户的截图的显示界面看,输入框里的手机号码完全没有问题,我还打通了。那会是什么原因造成的呢?

1.根据用户的描述他是从iphone自带的电话薄里copy了手机号码,然后粘贴在我们的输入框里,遇到了问题,而且每次必现。

真是厉害了(连自己手机号码都要复制粘贴)。

2.既然问题来了,就根据用户的描述在模拟器上进行了复盘,果然出现了。

3.但是从界面上完全没有问题啊,为啥不对呢?难道复制的粘贴后的内容有啥问题,打断点瞧下,果不其然,文本框复制的文本和普通的字符串有区别。

我们复制的电话号码 @"(415)555-3695",长度明明是14,但我打印出来的长度为16。

通过断点发现

我们电话簿里复制的电话号码(415)555-369前后分贝多了\u0000202d和\u0000202c。

这两个\u的是什么东西。难道所有复制粘贴的文本都会带这两个东西?后经过测试发现只有通过复制电话簿里的电话号码才会有这两个奇怪的东西。(难道是苹果的bug

不管了,既然问题出了,就只能解决了。

解决方案:

1.既然有这两个奇怪的东西,那就把这个去掉。首先知道这两个东西是啥?(找了资料说这个属于不显示的unicode码所以可以看到界面上显示时正常的但位数就不对)。

2.如何去掉

a.字符替换(发现@"\\p{Cf}"属于不显示的uicode的一个总称:\p{Cf} or \p{Format}: invisible formatting indicator.)

[str stringByReplacingOccurrencesOfString:@"\\p{Cf}" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, str.length)];

b.过滤(运用类似正则的东西)

    NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];NSCharacterSet *specCharacterSet = [characterSet invertedSet];NSArray *strArr = [str componentsSeparatedByCharactersInSet:specCharacterSet];return [strArr componentsJoinedByString:@""];

总结分析:

上面两个方法都可以解决上面的问题,但说下方法a就是仅仅针对不可见的unicode进行替换。

方法b的话只会显示[0-9]之间的数字,其它的字符也会过滤掉。

上面两个方法,我比较推崇a方法因为,它没有副作用,仅仅是去掉我们想去掉的。

关于不可见的unicode的了解,可以了解下。

iOS通讯录复制的手机号码字符串多了奇怪的unicode码\u0000202d-\u0000202c相关推荐

  1. 在C语言中如何高效地复制和连接字符串?

    就目前而言,在编程领域中,C语言的运用非常之多,它兼顾了高级语言的汇编语言的优点,相较于其它编程语言具有较大优势. 作者 | Martin Sebor 译者 | 苏本如,责编 | 刘静 出品 | CS ...

  2. ios 微信分享重新编码链接_微信民众号IOS端复制链接失足,安卓端分享链接翻开只能进入首页等题目的处理...

    近来在做某个需要在微信中翻开的项目,部份页面会经由过程微信分享或复制链接分享给其别人,然后就遇到了以下坑: 1.IOS端复制链接或在其他浏览器中翻开时,如果原网站链接原本应当是"http:/ ...

  3. 不小心合并了icloud通讯录_苹果手机号码被删除如何恢复?找回通讯录的具体步骤...

    苹果手机号码被删除如何恢复?虽然现在我们的生活方式有被一些社交软件所改变,但是很多情况下,直接用电话联系可以更高效的解决问题.所以很多人的手机通讯录里都保存了一些重要的号码,如果在使用手机的时候不小心 ...

  4. iOS 通讯录备份、恢复

            和相册 备份一样,公司产品备份功能有通讯录备份 功能,自然也有通讯录恢复了.iOS通讯录相关操作,iOS对通讯录的操作离不开的框架: #import <AddressBook/A ...

  5. android ios通讯录权限设置,IOS 通讯录的访问和修改的实现

    IOS 通讯录的访问和修改的实现 在iOS端可以通过AddressBook或者AddressBookUI两个框架实现,区别是第二个框架带视图,一般使用第一个框架就够了. 下面介绍AddressBook ...

  6. iOS 字符串截取、iOS 字符串替换、iOS 字符串分隔、iOS 字符串匹配、截取字符串、匹配字符串、分隔字符串

    iOS之字符串截取.iOS 字符串替换.iOS字符串分隔.iOS之字符串匹配.截取字符串.匹配字符串.分隔字符串 1.iOS 字符串截取 //1.ios截取字符串NSString *string =@ ...

  7. 将一个字符串计算出CRC16/XMODEM校验码(4位)

    将一个字符串计算出CRC16/XMODEM校验码(4位) unsigned short CRC16_XMODEM(unsigned char *puchMsg, unsigned int usData ...

  8. JavaScript实现floatAsBinaryString浮点转为二进制字符串算法(附完整源码)

    JavaScript实现floatAsBinaryString浮点转为二进制字符串算法(附完整源码) floatAsBinaryString.js完整源代码 floatAsBinaryString.j ...

  9. C# 自动投票和手机号码归属地查询 - 简单程序源码分享(高手飘过)

    C# 自动投票和手机号码归属地查询 - 简单程序源码分享(高手飘过) C# 自动投票和手机号码归属地查询 - 简单程序源码分享(高手飘过) 如有转载,请注明出处: http://www.cnblogs ...

最新文章

  1. 生成浮点数列表:Python range():TypeError: ‘float‘ object cannot be interpreted as an integer
  2. native react ssh_React Native踩坑笔记(持续更新中...)
  3. 文巾解题 326. 3的幂
  4. 卸载后清理干净_想要清理你的Mac?选这几款软件就对了
  5. [Vue源码分析]自定义事件原理及事件总线的实现
  6. 【转】Azure Messaging-ServiceBus Messaging消息队列技术系列2-编程SDK入门
  7. 可还行?这款手机首获德国红点设计大奖
  8. Cognos访问权限之让拒绝更友善
  9. oracle 主键自动地址实现
  10. 再也不学AJAX了!(三)跨域获取资源 ② - JSONP CORS
  11. 优酷下载的会员独享KUX视频格式怎么转换成MP4
  12. origin指数拟合
  13. 关于企业高校相关重要电气设备漏电保护方式的探究
  14. ArcGIS教程:按掩膜提取 (空间分析)
  15. MW6MaxiCode ACX溢出
  16. logback 自定义
  17. 【时间序列】ARMA 时序模型形式、理解、统计特性
  18. 2022年计算机考研408考点清单(1.0版本已更完——欢迎指正)
  19. 阿里云ECS用docker建Discuz!论坛和mediawiki
  20. mybatis的left join多条件操作

热门文章

  1. 国内产线 OLED 良率低,产能释放缓慢
  2. 在LUAT中使用MQTT客户端
  3. ubuntu+svn+apache配置
  4. GEC6818 移植 rtl8723bu wifi驱动
  5. 关闭Window 10 Ctrl+Shift+B(表情包)快捷键冲突
  6. excel去除小数点后面的数据,将数字取整
  7. 华为电脑 鸿蒙,微软宣布Win10装机量突破10亿,唯独华为电脑不能安装,鸿蒙极速反击...
  8. 推荐一个小日本做的网站,超强震撼,创意绝对棒,真牛
  9. 利用递归查询部门表,以树(tree)的结构展示返回给前端出来,一般都要有这种需求的
  10. 玩转NVIDIA Jetson AGX Xavier(1)--- jetson是什么