美文网首页
又碰到一个奇葩的BUG

又碰到一个奇葩的BUG

作者: 艾小仙人 | 来源:发表于2021-11-08 21:22 被阅读0次

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

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

image

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

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

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

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

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

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

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

淘宝

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

QQ注册

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

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

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/

相关文章

  • 又碰到一个奇葩的BUG

    最近线上发生了一个问题,同事找我说有个用户名字不对,正则验证不通过。 于是我就去数据库查询看了下这个用户的名字信息...

  • 碰到一个奇葩客商

    这个奇葩客商真的一言难尽,拨通电话后,他在那头头嘴巴吧啦一大堆,都不带停的,从没见过嘴巴这么碎的男的,服了。...

  • 今天碰到一个奇葩的客户。

    我是一个盲人推拿师,是女的推拿师,我想这是重点,今天早上有一个男的给我打电话问我在不在店里面,恰好,我正外出办事情...

  • 今天碰到的奇葩医生

    我家小宝因为吃了太多肉,又被风吹的开始发高烧,今天去了一家中医店,之前给我看过阑尾炎,只开了不到10块钱的药,今天...

  • 今天碰到的奇葩事

    今天上午,天气有点阴沉,我在店里做饭。刚做完了米饭,炒完了一个菜,准备炒下一个菜。 突然有个男人推门进来。我看到有...

  • 惊心动魄的事件

    奇葩的事听过很多,但真正碰到的还是很少,然而最近却碰到几起,可是说即惊又怕。 与往常一样到点吃午饭,...

  • 又碰到一个刺头

    作业又没做 星期日晚上对于我们班主任来说就是检查作业,开主题班会。 我发现一个男孩没有做作业,他上一周的星期天作业...

  • 碰到奇葩的领导怎么办?

    碰到奇葩的领导怎么办。

  • 奇葩系列——奇葩中的战斗机

    生活之所以这么丰富多彩,绝对是因为奇葩无处不在。谁的生活里没有碰到过几个奇葩呢?没有碰到过奇葩的生活估计都是不完美...

  • 20200809-今天碰到一个奇葩

    晚上吃完饭,儿子吵闹着要去游乐场,拗不过儿子的脾气,我只好带着儿子前往游乐场。由于儿子也大了,可以自己独立玩耍,加...

网友评论

      本文标题:又碰到一个奇葩的BUG

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