AI 写出的 \d+ 不一定只接受0到9,搜索到一段编号也不等于整个输入有效。先明确编号允许的字符,再用正常与异常样本验收正则。
用AI生成正则校验业务编号的读者。本文使用 Python 3.11 或以上版本的标准库,先验证一组人工构造的小样本。AI 负责提出实现或解释差异,结果由本地检查决定;这里没有把模型回答当成真实运行结果。

验证编号正则的匹配边界前,先定规则
本例编号只能是INV-加四个ASCII数字,不允许空格、小写前缀、全角数字或结尾换行。规则足够窄,读者能手工判断每个样本。
匹配器使用fullmatch,避免search在“说明INV-0123末尾”中找出局部字符串。字面字符类[0-9]把ASCII边界写在代码里。
测试不只给长度错误,还提供Unicode数字与换行。它们分别检验字符类别和全串范围,是AI常忽略的两类边界。
给 AI 的输入要包含什么
把下面这份输入说明和你的实际样本一起交给可用的 AI 编程助手。示例只含虚构数据;对真实材料先去除账号凭据和个人信息。
生成Python编号校验:只接受INV-后四位ASCII数字;必须整串匹配,不允许换行和空格;不要用search。测试INV-0001、INV-1234、INV-1234换行、说明INV-1234、inv-1234。逐项列预期。
要求模型保留检查条件,并把它认为缺少的业务定义列出来。若回答改变了输入字段、忽略异常分支或直接删除原材料,先要求修正,再运行。提示词的作用是缩小任务范围,验收仍以代码和数据为准。
保存并运行最小验证程序
下方程序把关键规则和验证用例放在同一个可复跑示例中,便于先理解输入如何变成输出,再用它检查 AI 给出的实现。
新建一个空目录,把下面代码保存为 check.py,在该目录打开终端,运行 python -X utf8 check.py。代码自带示例输入,不需要安装第三方库。
import re
pattern=re.compile(r'INV-[0-9]{4}')
cases=[('INV-0001',True),('INV-1234',True),('INV-1234',False),('INV-1234\n',False),('说明INV-1234',False),('inv-1234',False),('INV-12345',False)]
for value,want in cases:
got=pattern.fullmatch(value) is not None
assert got==want,(value,got,want)
print(repr(value),got)
assert re.fullmatch(r'\d{4}','1234') is not None
print('unicode_digit_demo',True)
怎样判断结果符合要求
前两个样本为True,其余编号样本为False。最后的unicode_digit_demo展示全角数字会被默认\d接受,说明字符类选择会改变业务范围。
下方是这份最小示例在本地执行得到的输出。它验证示例程序与断言的关系,不代表任何 AI 模型一次就能生成同样代码,也不构成性能或生产可靠性结论。
'INV-0001' True
'INV-1234' True
'INV-1234' False
'INV-1234\n' False
'说明INV-1234' False
'inv-1234' False
'INV-12345' False
unicode_digit_demo True
repr会把换行显示成转义字符,避免终端输出折行后看不出输入差异。审查AI回答时也保留输入的明确表示。
校验与提取是不同动作。一个用于文本提取的正则可能正确,却不适合验证字段。
哪些失败必须停下来处理
如果业务要求先去掉空格再校验,必须单独记录清洗步骤,不能让strip掩盖原始输入异常。
该正则只检查格式,不证明发票或编号真实存在,也不检查校验位。
不要把任意用户输入拼进正则。复杂嵌套模式和长文本需另测资源消耗,本文固定模式不覆盖所有正则安全问题。
接入自己的任务前再核对一次
把真实误判输入脱敏后加入用例,并让AI解释是字符、范围还是长度规则失误。
如果编号规范变了,先更新正反样本与文档,再重新生成模式。保留原值和拒绝原因供人工复核。
资料与适用范围
re.fullmatch要求整个字符串匹配;Python字符串模式中的\d默认包括Unicode十进制数字。以下链接核对于 2026-10-03;运行环境及额外依赖按本文前述说明。
相关基础可阅读 用ChatGPT写正则表达式:完整教程与注意事项。本文的重点是验证编号正则的匹配边界,可以把两项检查作为不同步骤保留。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33334.html