不可见字符和字符串前后空格处理

背景

场景一:有技术支持过来,说用户登录不上,报错原因是不存在该用户,但是明明已经注册过了。
过程:登陆的请求参数确实有收到,用户名是手机号。用户id也是存在的,根据用户id查出来的手机号,确实和登陆名是一样的,但是为啥会报用户不存在的错误呀?
开始根本没有想过用手机号进行查询,后来实在是没有排查到别的原因,突然想到之前遇到的手机号前后有空格的问题。length了一下,果然,长度为17。
告知业务人员,在编辑用户手机号的地方,将前后空格去掉,然后再保存一次,试了好几次之后,长度还是17,业务人员很确定,没有空格。我用concat前后连接字符观察后,也确实没有空格。后来我告知业务,让她把手机号全删除,手动输入一次再保存,然后OK,问题解决。
问题虽然解决了,但是目前为止,我仍然不明白什么原因。好奇的我就向经验丰富的同事,描述了一下问题现象。果然,有厉害的小伙伴就是好,他说之前遇到过这种问题,有不可见字符。让我拿着数据库中那个字符串,unicode转码一下,果然后面多了点东西\u202c,第一次知道了还有不可见字符

场景二:邀评之后,客人的回访,短信平台有回访记录,也有回调我所负责系统的日志,但是数据没有落库
**过程:**有了场景一的经验,length了一下,长度为17,以为还是不可见字符,用concat拼接字符打印了一下,其实不是,unicode编码了一下,手机号前面多了一位\u0009
业务人员问不是11位为啥手机号邀评能发出去呀,我也好奇,看了一下代码,发送邀评前是有手机号位数校验,校验的代码为phone.trim().length()!=11,所以最终判断的手机号长度还是11位

解决方案

1、string.replaceAll("\\p{C}", "")            // 该方法是将不可见字符串用空字符替换
2、string.trim()                              // 该方法是去掉字符串收尾的空格

在手机号落库前先进行以上处理

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值