音乐音符格式验证正则表达式无法正确拦截无效值求助
音乐音符验证正则表达式修正方案
当前你的正则存在两个主要问题,导致误判无效输入:
- 未做完全匹配校验:
Match方法只要输入里存在符合规则的片段就会返回成功,像CCCCCCC1里的C1会被匹配,因此误判为有效。 - 规则逻辑错误:未限制B/E不能带升号(#),还允许字母重复出现,且
\d\d?仅能匹配1-2位数字,不符合“任意整数”的要求。
修正后的代码
Regex noteRegex = new Regex(@"^(?:[ACDFG]#?|[BE])\d+$", RegexOptions.IgnoreCase); string input = Console.ReadLine(); if (noteRegex.IsMatch(input)) { Console.WriteLine("VALID"); } else { Console.WriteLine("INVALID"); } Console.ReadLine();
正则规则拆解
^和$:强制匹配整个输入字符串,彻底避免部分匹配导致的误判(?:[ACDFG]#?|[BE]):非捕获组,定义两种合法前缀:[ACDFG]#?:允许A/C/D/F/G后跟随0个或1个升号(#),禁止多个升号[BE]:仅允许B/E,不允许附加升号
\d+:匹配1个及以上数字,支持任意长度的整数RegexOptions.IgnoreCase:支持大小写输入(如a1、E3均视为有效)
测试验证
- 有效输入:
C1、C#1、B1、e5、A#1234→ 输出VALID - 无效输入:
B#1、CCCCCCC1、C####1、1C、C、H#1→ 输出INVALID
内容的提问来源于stack exchange,提问作者MIMEC Senchi UNKNOWN
相关产品推荐
相关产品推荐

