ASCII逗号和性别错误:我们如何不再等到发布后才检查博客
返回博客
文章verboo codedev toolsautomaçãodesenvolvimento de software

ASCII逗号和性别错误:我们如何不再等到发布后才检查博客

Mafra2026年9月24日阅读约 4 分钟

这周,我们一篇文章上线时,“Verboo Code”前面粘错了词,直到三种语言全部发布后才有人发现。另外三篇文章里,中文草稿用了半角逗号,而不是全角逗号。修复方法一直都有,只是靠有人盯着屏幕仔细看。我们把这个流程换成了一个脚本,用已经发生过的真实错误做测试,测试过程中还在脚本本身里发现了一个漏洞。

这周博客漏掉了什么错误?

2026年9月21日到23日之间,至少发生了四次,问题总是同一对:中文草稿里多余的半角标点,或者“Verboo Code”前面的葡萄牙语冠词性别错误(这个品牌在葡萄牙语里永远是阴性,“a Verboo Code”)。其中一次直到发布后才被发现。

日期文章错误发现时间
9月21日/rewind中文草稿里的半角逗号发布前,视觉检查时发现
9月22日Kimi K3 vs Claude Fable 5中文草稿里的半角逗号和冒号发布前,用现场写的脚本发现
9月23日Codex CLI 的 /resume“Verboo Code”前的葡萄牙语性别错误三种语言全部发布后才发现,用取消发布再重新发布修复
9月23日Codex,432 Workspace routing 错误中文草稿里的半角逗号发布前,视觉检查时发现

为什么视觉检查靠不住?

因为这种错误太小,眼睛不可能每次都注意到。两百个中文字符中间的一个半角逗号,占的宽度和全角逗号几乎一样,没有人会一个标点一个标点地量。性别错误更糟:错误的形式在葡萄牙语语法上完全正确,只是对这个品牌来说是错的,所以没有任何地方会跳出来提醒你。

9月23日那次错误,经过了写作的人、生成翻译的人、发布前检查的人,三道关都过了,还是上线了。它只在发布之后的一次检查里才浮现出来,而那时文本已经在线上了。

我们写的这个脚本是怎么工作的?

四项检查,每一项都建立在一个正则表达式上,在第一次发布前就跑一遍草稿的HTML,而不是只在发布后跑:

python3 checar_padrao.py draft.html pt
python3 checar_padrao.py draft.html zh

其中性别检查是葡萄牙语专属的,因为英文和中文在这里都没有语法性别的问题:

GENERO = re.compile(
    _B_INI + r"(o|do|no|ao|dos|nos|aos)\s+Verboo\s+Code" + _B_FIM,
    re.IGNORECASE,
)

另外三项检查用的是同一套边界逻辑:一项抓文本任何位置的两种破折号(Unicode字符U+2014和U+2013);另一项抓贴着中文字符(范围U+4E00到U+9FFF)的半角逗号、冒号或分号;最后一项抓Verboo Code已经不再提供的那个优惠的名字。找到问题就返回退出码1,所以可以当作发布前的一道关卡,不用靠人记得去看屏幕。

脚本自己掉进的陷阱

第一版里,性别检查和旧优惠检查用的都是Python默认的单词边界\b。用一句真实的中文句子测试,一个葡萄牙语单词紧贴在一个汉字后面,中间没有空格,脚本什么都没找到。原因是:Python的\b把中文汉字当成单词字符处理,所以汉字和后面的字母之间根本没有边界。这项检查恰好在标点问题最常见的语言里失灵了。

修复方法是把\b换成一个只把拉丁字母或数字算作单词一部分的自定义边界:

_B_INI = r"(?<![A-Za-zÀ-ÿ0-9_])"
_B_FIM = r"(?![A-Za-zÀ-ÿ0-9_])"

修好之后,同样的测试就能抓到贴着汉字的那个单词,连同旁边的半角标点一起。

脚本真的能抓到已经发生过的错误吗?

我们用两个真实案例的重现版本,加一段干净的文本做对照,测试了一遍:

输入结果
重现9月23日性别错误的句子失败:找到了“Verboo Code”前的错误形式
一句贴着汉字的半角逗号和冒号的中文句子失败:两处都找到了
“Verboo Code保存会话。标点正常,完全没问题。”正常:什么都没找到

把这个脚本跑一遍这篇文章自己的三个草稿,pt、en和zh,结果什么都没找到。这说得通:为了解释错误而不重复错误,这段文字用描述代替了原句的完整重现,所以没有留下任何东西让检查误认成新的错误。测试表格里用描述而不是原句,也是同一个原因。

写这个脚本、测试它、在检查本身里发现一个漏洞并修好,这些事一个上午就做完了,因为没有一次尝试的成本很高。用Verboo Code,套餐内的token是无限的,所以第五次尝试和第一次花的钱一样多。

喜欢这篇文章吗?
把知识分享给你的朋友。
// 继续阅读

相关文章