正则表达式用于一系列数字和一个字符用于验证

1 c# regex validation filter

我正在尝试使用正则表达式来验证我正在处理的项目的用户输入.我目前使用的模式是

^[1-9][0-3]?|[Q|q]$ //Range of 1-13 or Q|q (Can't include 0)
Run Code Online (Sandbox Code Playgroud)

根据Regex101.com,它显示用户输入(例如15)不匹配,但是当我运行项目时,它就像是匹配一样.如何限制此正则表达式仅接受1-13中的数字范围和字符Q或q?对于上下文中我的while循环错误,这里也是代码.

 while (!match.Success)
        {
            // Ommited Console.WriteLines to for clarity.
            FancyArtBottom();
            Console.SetCursorPosition(47, 19);
            userSelection = Console.ReadLine();
            match = Regex.Match(userSelection, @"^[1-9][0-3]?|[Q|q]$");
        }
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 5

^[1-9][0-3]?|[Q|q]$模式中数字从匹配19随后与来自一个可选的数字 03在所述串(同的开始^[1-9][0-3]?部分),或(|)一个Q,|q在字符串的末尾(带[Q|q]$部).所以,|"分裂"模式并且它比你期望的更匹配.

此外,[1-9][0-3]?刚刚匹配比数字更来自013如你所见.

此外,|字符类的内部与文字|字符匹配,它失去了交替运算符的特殊含义.

你可以用

^(?:[1-9]|1[0-3]|[Qq])$
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

细节

  • ^ - 字符串的开头
  • (?:[1-9]|1[0-3]|[Qq])- 分组构造(非捕获组)(制作^$锚点适用于组中的所有备选方案)匹配:
    • [1-9]-从数字19
    • | - 要么
    • 1[0-3] - 1然后从数字03
    • | - 要么
    • [Qq] - qQ
  • $ - 字符串结尾.