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

时间:2009-02-09 16:19:09

标签: javascript regex numeric-ranges

我在表单上有一个字段,其中包含以下值:-1,2-10,99

我的业务规则与答案2-10有关。

我正在尝试编写一个匹配2-10但而不是 99的正则表达式,我遇到了麻烦。

原始表达:

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

失败,因为99匹配(技术上,两次)。线路边界是我从未感到满意的东西。我在expresso中的行为与其他地方(例如.net)不同。在此特定实例中,正则表达式正在 javascript 中运行。无论如何,expresso似乎忽略了它们(如果我把这些值放在括号中:

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

^[2-9]$

要么“全部拼出”或作为范围,如果我指定开头行/字符串结束行/字符串字符,expresso永远不会返回任何匹配(是的,我试图在第二种情况下分别匹配10)

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

6 个答案:

答案 0 :(得分:46)

显然,您不应该使用RegExp而是使用数值评估:

var num = parseInt(aNumber, 10);
if (num >= 2 && num <= 10) {
    alert("Match found!");
}

答案 1 :(得分:20)

你需要括号。我会进一步使用范围来保持可读性:

^([2-9]|10)$

答案 2 :(得分:7)

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

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

答案 3 :(得分:1)

完整的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:在第二个正则表达式中添加了缺少的括号。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

此在线工具非常适合为数字范围生成re:http://utilitymill.com/utility/Regex_For_Range。对于2到10的范围,它给出了这个表达式:\b0*([2-9]|10)\b。如果要省略前导0,请取出“0 *”部分。