上周接了个外包小项目,甲方非要我做个数据校验功能。刚上手觉得挺简单,不就是把用户输入的数字转成文本处理嘛结果第一天就栽了跟头。
一、莽撞开局
我抄起键盘就开始整类型转换。用户输数字我直接string()套上去,前端表单哗接收得挺欢。当时美滋滋想着,下班前能搞定。
- 坑1:没管负数
- 坑2:字母混着数字
- 坑3:空值当0处理
凌晨两点甲方电话炸过来:"购物车咋能买负30件商品?库存被薅秃了!" 我对着屏幕冷汗直冒,开发者工具里输个"-30"直接变成字符串入库,校验形同虚设。
二、胡乱补救
赶紧搬出正则表达式当救兵。写着"^d+$",以为万事大吉。测试员输个"12.3"直接卡死,小数点把程序整崩溃了。更绝的是,有人复制"123"这种全角数字,系统直接装瞎放行。
这时候才想起来打印数据类型日志,好家伙发现四种鬼东西:
- float32价格
- int库存
- 字符串地址
- 空指针优惠券
甲方在电话里咆哮的时候,我正盯着panic: interface conversion的错误提示抓耳挠腮。
三、重头做人
彻底推翻重写。这回学乖了:
- 🛡️ 所有输入先扒层皮
- 🔍 拿当照妖镜
- ⛔ 遇错误直接打回
- 📏 数值范围用数学库锁死
特地找测试组要了份作死清单:
- 在数量栏贴emoji
- 电话号字段输SQL语句
- 金额框写"二百五"
现在系统见招拆招:中文转译成"NaN",特殊符号直接弹警示红框。昨晚故意在价格框输"3.1415926",程序自动四舍五入成两位小数,终于没再报错。
折腾两周才明白,类型转换像给数据穿衣服:
1. 得先看身材(数据类型)
2. 不能硬塞(强制转换)
3. 尺码不对就重量(校验)
早上甲方验收时嘀咕:"早知这么麻烦就该加钱..." 我攥着咖啡杯的手直哆嗦——这俩通宵熬的,比写主业务逻辑还累。
唠叨句:管住输入口比修数据库简单一百倍。昨天发现个邪门事:有人往生日栏塞Unix时间戳,要不是提前做了日期格式校验,用户档案库早成乱码坟场了。
(记于凌晨四点改完一版校验,窗外清洁车开始收垃圾了)