You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Go正则表达式匹配带多个连字符的字母数字序列号?

正则表达式编写方案

问题原因

  • 原有正则没有使用^和$锚点,只要字符串中存在符合规则的子串就会返回true,不会校验整个字符串的格式
  • 没有指定每段字符的长度为4,也没有控制连字符的位置,无法避免末尾出现多余连字符的情况

正确正则说明

如果要完全匹配示例格式A12T-4GH7-QPL9-3N4M(固定4段,每段4位字母数字,段间用连字符分隔,首尾无连字符),使用如下正则:
^[a-zA-Z0-9]{4}(-[a-zA-Z0-9]{4}){3}$
各部分含义:

  • ^ 匹配字符串开头
  • [a-zA-Z0-9]{4} 匹配4位字母或数字
  • (-[a-zA-Z0-9]{4}){3} 匹配3次「连字符+4位字母数字」的组合,对应剩余的3段内容
  • $ 匹配字符串结尾

如果需要支持任意数量的段落(至少1段),可以把{3}改成*,正则为^[a-zA-Z0-9]{4}(-[a-zA-Z0-9]{4})*$。如果序列号只允许大写字母,去掉正则里的a-z即可;如果需要不区分大小写,也可以在正则开头加(?i)标志,简化写法为^(?i)[0-9A-Z]{4}(-[0-9A-Z]{4}){3}$。

修正后代码示例

package main

import (
	"fmt"
	"regexp"
)

func main() {
	// 固定4段的匹配规则
	re := regexp.MustCompile(`^[a-zA-Z0-9]{4}(-[a-zA-Z0-9]{4}){3}$`)
	
	// 测试用例
	testCases := []string{
		"A12T-4GH7-QPL9-3N4M", // 符合格式,返回true
		"A12T-A12T",           // 只有2段,返回false
		"A12T-A12T-",          // 末尾有多余连字符,返回false
		"a12t-4gh7-qpl9-3n4m", // 小写也符合,返回true
	}
	
	for _, s := range testCases {
		fmt.Printf("%s 匹配结果:%t\n", s, re.MatchString(s))
	}
}

内容的提问来源于stack exchange,提问作者Brett La Pierre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:15:02