前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >又碰到一个奇葩的BUG​,注意标题

又碰到一个奇葩的BUG​,注意标题

作者头像
艾小仙
发布2021-11-08 14:05:15
6780
发布2021-11-08 14:05:15
举报
文章被收录于专栏:艾小仙艾小仙

最近线上发生了一个问题,同事找我说有个用户名字不对,正则验证不通过。

于是我就去数据库查询看了下这个用户的名字信息,就长这个样子。

没仔细看好像没啥问题啊,但是认真看了两遍发现好像不太对,怎么这个字这么宽呢?

我靠,这塔喵的是好像是全角啊!

具体原因就是因为插入的名字是全角的,导致其他地方调用接口取名字用正则判断不通过。

修复这个问题很简单,重新用半角的字体更新一下名字就可以了,另外前端是有校验的,后端没有用正则做校验,需要补上这个校验逻辑。

但是这个问题就很奇怪,这个全角和半角难道没有校验的吗?

带着好奇,我特意测试了一下淘宝、腾讯和头条的注册,看是不是可以保存全角。

首先试了下淘宝,红框中我输入的是全角的手机号,很明显全角是不行的。

淘宝

再试试QQ注册,发现也是不可以的,这很好,大家都不要全角的。

QQ注册

问题到这里其实很清晰了,前后端在注册的时候肯定遗漏了这个校验的逻辑,补上即可。

我再测试了一下匹配英文的正则:

代码语言:javascript
复制
var p = /^[A-Za-z0-9]+$/g
p.match('qqq') //输出true
p.match('qqq') //输出false

所以建议大家没有对手机号、名字之类做校验的可以补上一个正则的校验,防止落库的数据是全角,避免坑爹。

这个会引发很多问题,比如如果全角保存的手机号,调发送手机验证码接口,别人校验的是半角的规则,你发送验证码都该报错了!

问题都说完了,不妨再了解下到底什么是全角?什么是半角?

用过输入法大家肯定都见过,但是具体的区别可能还真不知道。

在GB/T 9851.2-2008《印刷技术术语 第二部分:印前术语》中有对应的解释:

2.31 全角 em 排字的度量单位,宽度等于所使用的文字的磅数(point),用作排版宽度水平方向的度量。 2.32 半角 en 排字的量度单位,宽度等于同一磅数全角的一半。

大家都知道,我们中文字体都是方块字,包括排版也是一样,所以我们的汉字一个字的宽度是一样的。

但是在英文里就不一样了,一个英文字母的宽度可能是不一样的,所以全角/半角的概念诞生就是为了英文而服务的。

它要表达的意思很简单,就是代表字体宽度的概念而已。

而实际上,全角/半角这个概念来源于日本,在日文中,角的意思就是正方形,所以全角/半角的含义就是整个正方形/半个正方形的意思。

这个还有很多叫法,比如全身/半身,港台地区叫全形/半形,但是无论怎样,这些称呼都是在印刷行业的里术语称呼。

但是后来,随着计算机的发展,好像咱们科技界的人不太懂这玩意儿,直接把全角/半角搬过来用了,于是就形成了现在我们知道的局面。

我们都知道,最开始的时候为了映射二进制和英文字母的关系,有了ASCII码,它只有1个字节,最多也只能表达256个符号,而且英文也没用完,只用了128个。

但是对于中文和很多其他语言来说,256个符号肯定是不够用的,那咋办呢?那就只能用两个字节了。

所以,随着用户的使用习惯,逐渐习惯地把全角当成双字节的中文、韩文,半角当成英文这样子。

在计算机发展初期的时候,全角/半角的概念大概就等同于单字节/双字节这样的含义,另外还有一层含义就是我们上面说过的表示宽度,全角表示占用排版的宽度是半角的一倍。

当然了,随着计算的发展,又诞生了GB2312、GBK,Unicode、UTF-8这些编码,比如GBK中文英文都是两个字节,UTF8下文中3个字节,现在的全角/半角的概念就和占用存储空间大小没有任何关系了。

所以总结下来啊,全角/半角的称呼来源日文,但是被错误的直接带入了科技界(印刷界的人说我都不知道你们这么牛逼),最初的时候全角/半角就是代表宽度的含义,也被约定俗成地赋予了双字节/单字节的含义,现在来看它只能用户描述宽度更为合适一点。

还有啊,做好代码的参数校验,这个落库了就麻烦了,否则还得跟我一样去刷一遍数据!

参考资料: https://zh.wikipedia.org/wiki/%E5%85%A8%E5%BD%A2%E5%92%8C%E5%8D%8A%E5%BD%A2#cite_note-1 https://www.thetype.com/2018/02/14211/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 艾小仙 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档