把不许什么也写进去
秦望舒给生鲜冷链订单录入页做编号格式校验,规则是 2 位大写产区码 FS/GG/HB、8 位年月日、4 位流水号,短横线分隔。第一个文本框写业务规则不写正则,除了"要什么"还得写"不要什么":"产区码只允许三种"、"流水号不能全为 0"。这两条正是后面 (?:FS|GG|HB) 与 (?!0{4}) 的出处,只写正向要求会拿到一个宽松版本。

四条约束配四条反例
第二个框贴 6 行样例,2 正 4 反:FS-20260315-0027 与 GG-20260316-1008 合法,HB-20260317-0000 流水全 0、fs-20260318-0031 产区小写、FS-2026031-0027 日期少一位、XX-20260319-0044 产区非法。做法叫"每个约束配一个反例",四条约束四个反例,别让两条重复盖同一条,否则会带偏权重。正例只说要匹配什么,边界全靠反例给。

逐段解释看三处符号
"正则方言"选 JavaScript,生成的是 /^(?:FS|GG|HB)-\d{8}-(?!0{4})\d{4}$/,另附多行逐行校验的 gm 版本。逐段解释拆了 8 段,值得记的是三处:(?:FS|GG|HB) 用非捕获分组,不必取回产区码;(?!0{4}) 只判断不消耗字符,后面仍得写 \d{4} 吃掉那四位;短横线在字符类外无范围含义,无需转义。写成 [FS|GG|HB] 就成了任选一个字符。

别误加标志与语义校验
锚点 ^ 与 $ 少写一个就会放过子串,定长量词 {8} {4} 换来"不会回溯爆炸",写成 \d+ 反而引误匹配。"边界与陷阱"里点明切勿误加 i 标志,带 g 的实例复用会让 lastIndex 漂移,日期语义校验需另写逻辑。对照表逐行标了 6 条样例匹配与否,用"复制"拿全文之前,先确认这层格式校验不顶替业务侧的日期判断。

企业知识网( www.qiyezhishi.com )提供的结果为参考性内容,不构成法律、税务或投资建议。具体请以主管部门口径与最新法规为准。