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

时间:2018-09-17 14:57:34

标签: c# regex validation filter

我正在尝试使用正则表达式来验证用户对我正在从事的项目的输入。我当前使用的模式是

^[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]$");
        }

2 个答案:

答案 0 :(得分:5)

^[1-9][0-3]?|[Q|q]$模式在字符串的开头匹配从19的数字,然后是从03的可选数字(以^[1-9][0-3]?部分),或(|)在字符串的末尾带有Q部分的|q[Q|q]$。因此,|“分割”了模式,并且匹配程度超出了您的预期。

此外,如您所见,[1-9][0-3]?仅比013的数字匹配。

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

您可以使用

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

请参见regex demo

详细信息

  • ^-字符串的开头
  • (?:[1-9]|1[0-3]|[Qq])-分组构造(a non-capturing group)(使^$锚适用于组中的所有替代项)匹配:
    • [1-9]-从19的数字
    • |-或
    • 1[0-3]-1,然后是从03的数字
    • |-或
    • [Qq]-qQ
  • $-字符串的结尾。

答案 1 :(得分:1)

您可以使用以下内容:

^(1[0-3]|[1-9]|Q|q)$

或者:

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

查看示例:https://regex101.com/r/y6htBi/1