You need to enable JavaScript to run this app. 编写可匹配字符串、#及数字的GitLab提交信息钩子正则
优惠活动
大模型
产品
解决方案
定价
更多

编写可匹配字符串、#及数字的GitLab提交信息钩子正则

适配GitLab提交钩子的合规提交信息正则

原正则存在的问题

你之前编写的^(BUG|bug|Bug)\ |#\d+ 存在三处核心问题,导致无法匹配预期场景:

  • 分支逻辑错误:正则中的| 会将匹配规则拆为两个独立分支,即「匹配开头的bug类字符串+空格」OR「匹配文本任意位置的#加数字」,完全不符合连续匹配的要求
  • 数字位数无约束:仅用\d+ 没有限制数字为5-6位,会误匹配3位、7位等不合规的数字
  • 分隔场景覆盖不全:仅单独罗列了空格、#两种字符,没有考虑零分隔、#与空格组合的情况

符合要求的正则方案

根据列出的规则,给出兼容RE2语法(适配GitLab钩子运行环境)的正则,分两种常用校验场景:

  • 场景1:要求提交信息完全匹配给定格式,不允许后续追加其他内容
    ^(BUG|bug|Bug)[#\s]*\d{5,6}$
  • 场景2:要求提交信息开头符合格式,后续可追加业务描述(Git提交钩子的通用使用方式)
    ^(BUG|bug|Bug)[#\s]*\d{5,6}

逐段规则说明

  • ^:强制从提交信息的最开头开始匹配,杜绝内容前置夹杂其他字符的情况
  • (BUG|bug|Bug):精确匹配三种允许的开头大小写形式,不会误识别其他大小写组合(如bUg、bUG等)
  • [#\s]*:匹配开头字符串与数字之间的所有允许分隔符,其中# 匹配规则允许的井号,\s 匹配所有空白字符(空格、制表符等),* 表示允许该类分隔符出现0次或多次,可完整覆盖所有给定示例场景:
    • 无分隔拼接:bug12345
    • 单空格分隔:bug 12345
    • 井号直接拼接:Bug#12345
    • 井号加空格分隔:BUG # 12345
  • \d{5,6}:强制数字部分为5位或6位,精准过滤其他位数的不合规数字
  • $:仅在全格式校验场景下使用,强制匹配到数字部分即结束,不允许后续出现其他内容

合规性校验说明

上述正则可完全匹配所有列出的示例输入,同时可拦截以下不合规场景:

  • 开头大小写不符合要求的内容,如bUg 12345
  • 分隔部分夹杂其他字符的内容,如bug 测试12345
  • 数字位数不符合要求的内容,如bug 1234(4位)、bug 1234567(7位)

内容的提问来源于stack exchange,提问作者Sameer Atharkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 15:36:08