7

我在表单上有一个字段,它采用以下值:-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]$

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

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

4

6 回答 6

46

这显然是您不应该使用 RegExp 而使用数值评估的情况:

var num = parseInt(aNumber, 10);
if (num >= 2 && num <= 10) {
    alert("Match found!");
}
于 2009-02-09T16:28:49.510 回答
20

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

^([2-9]|10)$
于 2009-02-09T16:33:39.810 回答
7

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

^(2|3|4|5|6|7|8|9|10)$
于 2009-02-09T16:21:11.697 回答
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:在第二个正则表达式中添加了缺少的括号。

于 2009-02-09T17:07:21.900 回答
0

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

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

于 2009-02-09T16:21:50.713 回答
0

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

于 2010-08-30T14:52:53.877 回答