Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于数字范围的正则表达式和用于验证的一个字符_C#_Regex_Validation_Filter - Fatal编程技术网

C# 用于数字范围的正则表达式和用于验证的一个字符

C# 用于数字范围的正则表达式和用于验证的一个字符,c#,regex,validation,filter,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)

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

^[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]
部分),或者(
)字符串结束处匹配
Q
/Q>$
part)。因此,
|
“分割”模式,它比您预期的匹配更多

而且,正如您所看到的,只需匹配从
0
13
的多个数字即可

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

你可以用

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

详细信息

  • ^
    -字符串的开头
  • (?:[1-9]| 1[0-3]|[Qq])
    -分组结构(a)(使
    ^
    $
    锚适用于组中的所有备选方案)匹配:
    • [1-9]
      -从
      1
      9
    • |
      -或
    • 1[0-3]
      -
      1
      然后是从
      0
      3
    • |
      -或
    • [Qq]
      -
      q
      q
  • $
    -字符串结束

^[1-9][0-3]?|[Q|Q]$
模式匹配
1
9
之间的一个数字,然后在字符串的开头(带有
^[1-9][0-3]?
部分)或(
)一个
Q
字符串的末尾(带有
)[Q | Q]$
part)。因此,
将模式“拆分”后,它会比您预期的匹配更多

而且,正如您所看到的,只需匹配从
0
13
的多个数字即可

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

你可以用

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

详细信息

  • ^
    -字符串的开头
  • (?:[1-9]| 1[0-3]|[Qq])
    -分组结构(a)(使
    ^
    $
    锚适用于组中的所有备选方案)匹配:
    • [1-9]
      -从
      1
      9
    • |
      -或
    • 1[0-3]
      -
      1
      然后是从
      0
      3
    • |
      -或
    • [Qq]
      -
      q
      q
  • $
    -字符串结束
您可以使用以下内容:

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

参见示例:

您可以使用以下内容:

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


参见示例:

使用
^(?[1-9]| 1[0-3]|[Qq])$
@WiktorStribiżew:在正则表达式中到底做了什么?似乎找不到它的作用。我以前见过一些人使用它。这是一个非捕获组。请参见,然后使用
^(?[1-9]| 1[0-3]|[Qq])$
@WiktorStribiżew:在regex中到底做什么?似乎找不到它做什么。我以前见过一些人使用它。这是一个非捕获组。请看,这是一个。你犯了与OP相同的错误。这将与post做相同的事情。不,请看演示,15不匹配。删除了否决票,你原来没有该组设置到位。现在这将起作用。你正在犯与OP相同的错误。这将与帖子做相同的事情。不,请参阅演示,15不匹配。删除下一票,你最初没有设置分组。现在这将起作用。