我正在尝试使用 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
-
-
$
- 字符串结束。
关于c# - 一系列数字的正则表达式和一个用于验证的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52370563/