Skip to main content
 首页 » 编程设计

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

2024年01月29日26exmyth

我正在尝试使用 Regex 来验证用户对我正在处理的项目的输入。我目前使用的模式是

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

根据 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]$"); 
        } 

请您参考如下方法:

^[1-9][0-3]?|[Q|q]$模式匹配 1 中的数字至 9后跟来自 0 的可选数字至 3在字符串的开头(带有 ^[1-9][0-3]? 部分),或 ( | ) a Q , |或 q在字符串的末尾(带有 [Q|q]$ 部分)。所以,| “拆分”模式,它的匹配程度超出您的预期。

此外, [1-9][0-3]? 只匹配来自 0 的数字至 13如你所见。

此外,|在字符类中匹配文字 | char,它失去了 alternation operator 的特殊含义.

你可以使用

^(?:[1-9]|1[0-3]|[Qq])$ 

参见 regex demo

详情

  • ^ - 字符串的开头
  • (?:[1-9]|1[0-3]|[Qq]) - 分组构造(non-capturing group)(使^和$ anchor 适用于组中的所有备选方案)匹配:
    • [1-9] - 来自 1 的数字至 9
    • | - 或者
    • 1[0-3] - 1然后是来自 0 的数字至 3
    • | - 或者
    • [Qq] - q或 Q
  • $ - 字符串结束。