代码之家  ›  专栏  ›  技术社区  ›  peacedog

正则表达式匹配2-10,但不是99

  •  7
  • peacedog  · 技术社区  · 17 年前

    我在表单上有一个字段,它接受以下值:-1、2-10、99

    我有一条商业规则,涉及答案2-10。

    我试图编写一个匹配2-10的正则表达式,但是 99,我有麻烦了。

    原始表达:

    ^2|3|4|5|6|7|8|9|10$
    

    失败是因为99匹配(技术上是两次)。此外,Line边界是我从未感到舒服的地方。我在expresso中观察到的行为与在其他地方(例如.net)不同。在这个特定的实例中,正则表达式正在 javascript语言 不管怎样,expresso似乎忽略了它们(如果我把这些值放在括号里:

    ^[2|3|4|5|6|7|8|9|10]$
    
    ^[2-9]$
    

    无论是“全部拼写”还是作为一个范围,如果我指定了开头行/字符串结束行/字符串字符,expresso都不会返回任何匹配项(是的,在第二种情况下,我试图单独匹配10)。

    我知道,我知道。如果你使用正则表达式来解决一个问题,那么你有两个问题(大概他们会开始邀请朋友过来,事情1和事情2的风格)。我不 在这里使用一个;我可以切换到案例陈述。但似乎我应该能够在这里使用正则表达式,这似乎是一件合理的事情。说到正则表达式,我仍然很生疏;

    6 回复  |  直到 17 年前
        1
  •  20
  •   Svante    17 年前

    这显然是一个不应该使用RegExp而应该使用数值计算的情况:

    var num = parseInt(aNumber, 10);
    if (num >= 2 && num <= 10) {
        alert("Match found!");
    }
    
        2
  •  46
  •   Georg Schölly Crazy Developer    15 年前

    你需要菊花来做这件事。我会进一步使用范围来保持可读性:

    ^([2-9]|10)$
    
        3
  •  7
  •   Adam Rosenfield    17 年前

    在交替之间使用括号,因为连接的优先级高于交替:

    ^(2|3|4|5|6|7|8|9|10)$
    
        4
  •  1
  •   Kris    17 年前

    一个完整的javascript函数,可以匹配2到9或10

    <script type="text/javascript">
        function validateValue( theValue )
        {
            if( theValue.match( /^([2-9]{1}|10)$/ ) )
            {
                window.alert( 'Valid' );
            }
            else
            {
                window.alert( 'invalid' );
            }
            return false;
        }
    </script>
    

    正则表达式很容易扩展以包含您的所有规则:

    /^(-1|[2-9]|10|99)$/ // will match -1, 2-10, 99
    

    编辑:我忘了提到你必须用自己的真/假情境逻辑来代替。 edit2:在第二个正则表达式中添加了缺少的括号。

        5
  •  0
  •   Glen Solsberry    17 年前

    原始表达式失败的原因是您匹配了^2,3,4,5,6,7,8,9,10$。

    试试这个正则表达式:^(2|3|4|5|6|7|8|9|10)$

        6
  •  0
  •   PaulMcG    16 年前

    这个在线实用程序非常擅长为数字范围生成re: http://utilitymill.com/utility/Regex_For_Range 对于2-10的范围,它给出了以下表达式: \b0*([2-9]|10)\b 。如果要省略前导0,请去掉“0*”部分。

    推荐文章