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

标签 c# regex validation filter

我正在尝试使用 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] - qQ
  • $ - 字符串结束。

关于c# - 一系列数字的正则表达式和一个用于验证的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52370563/

相关文章:

python - 使用Python的 `re`模块将所有字符设置为小写

Python 在 Apache 日志文件中搜索 IP 数量

MySQL 字段值,可以定义超出数字计数的 float 吗?

c# - 求总和并添加概率标度

c# - 如果文件格式与列表中的任何内容匹配,则改进 C# 中的测试方法

c# - 交替线程 #2

c# - 使用特定值解决 MemberChangeConflict

用于获取字符内字符串的正则表达式,在 Presto/Athena 中第一个字符集可选

使用格式参数验证 JavaScript 日期(和日期时间)

javascript - 有没有办法为 HTML5 输入的模式属性应用正则表达式修饰符?