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

音乐音符格式验证正则表达式无法正确拦截无效值求助

音乐音符验证正则表达式修正方案

当前你的正则存在两个主要问题,导致误判无效输入:

  1. 未做完全匹配校验:Match方法只要输入里存在符合规则的片段就会返回成功,像CCCCCCC1里的C1会被匹配,因此误判为有效。
  2. 规则逻辑错误:未限制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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:52:36