【问题标题】:Regex for a range of numbers and one character for validation正则表达式用于一系列数字和一个用于验证的字符
【发布时间】:2019-02-21 13:04:39
【问题描述】:

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

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

【问题讨论】:

标签: c# regex validation filter


【解决方案1】:

^[1-9][0-3]?|[Q|q]$ 模式匹配从19 的数字,后跟从03 的可选数字,位于字符串的开头(带有^[1-9][0-3]? 部分),或(@987654331 @) 字符串末尾的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]) - 分组构造(non-capturing group)(使 ^$ 锚适用于组中的所有备选方案)匹配:
    • [1-9] - 从 19 的数字
    • | - 或
    • 1[0-3] - 1 然后是从 03 的数字
    • | - 或
    • [Qq] - qQ
  • $ - 字符串结束。

【讨论】:

    【解决方案2】:

    您可以使用以下内容:

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

    或者:

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

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

    【讨论】:

    • 你犯了和OP一样的错误。
    • 这和帖子做的一样。
    • 不,看demo,15不匹配。
    • 删除了反对票,您最初没有进行分组。现在这将起作用。
    猜你喜欢
    • 2014-12-03
    • 1970-01-01
    • 2021-06-06
    • 2011-10-19
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多