Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式匹配2-10,但不是99_Javascript_Regex_Numeric Ranges - Fatal编程技术网

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

Javascript 正则表达式匹配2-10,但不是99,javascript,regex,numeric-ranges,Javascript,Regex,Numeric Ranges,我在表单上有一个字段,它采用以下值:-1、2-10、99 我有一个关于答案2-10的商业规则 我正在尝试编写一个正则表达式,它将匹配2-10,但不是99,我遇到了麻烦 原文是: ^2|3|4|5|6|7|8|9|10$ 失败,因为99匹配(技术上是两次)。而且,线条边界是我从来都不习惯的。我在expresso中观察到的行为与在其他地方(如网络)观察到的行为不同。在这个特定的实例中,正则表达式是在javascript中运行的。无论如何,expresso似乎忽略了它们(如果我将这些值放在括号中:

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

我有一个关于答案2-10的商业规则

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

原文是:

^2|3|4|5|6|7|8|9|10$
失败,因为99匹配(技术上是两次)。而且,线条边界是我从来都不习惯的。我在expresso中观察到的行为与在其他地方(如网络)观察到的行为不同。在这个特定的实例中,正则表达式是在javascript中运行的。无论如何,expresso似乎忽略了它们(如果我将这些值放在括号中:

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

^[2-9]$
无论是“全部拼写”还是作为一个范围,如果我指定开头行/字符串结尾行/字符串字符,expresso都不会返回任何匹配项(是的,我在第二种情况下尝试分别匹配10个)


我知道,我知道。如果你用正则表达式来解决一个问题,那么你就有两个问题(大概他们会邀请朋友过来,第一件事和第二件事风格)。我不必在这里使用正则表达式;我可以切换到case语句。但似乎我应该能够在这里使用正则表达式,而且这似乎是一件合理的事情。对于正则表达式,我还是很生疏;

在替换项周围使用括号,因为串联比替换项具有更高的优先级:

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

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


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

这显然是一个不应该使用正则表达式而应该使用数值计算的情况:

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

如果(num>=2&&num,您需要使用parantises。我将进一步使用范围来保持可读性:

^([2-9]|10)$

一个完整的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>
编辑:我忘了提到你必须用你自己的真/假情境逻辑来代替。
edit2:在第二个正则表达式中添加了缺少的括号。

此联机实用程序非常擅长为数字范围生成re:。对于包含2-10的范围,它给出了以下表达式:
\b0*([2-9]| 10)\b
。如果要省略前导的0,请去掉“0*”部分。

或者对于更紧凑的形式([2-9]| 10)$那么为什么这个与Expresso中的任何内容都不匹配?我在示例文本窗口中大量插入了数值,但没有匹配项?我必须调整一些设置,但Expresso在这里拒绝了我。@Martin-你错过了一个技巧,看到soulmerges的答案:)@peacedog-你发布的代码[没有匹配](,这完全改变了meaning@annakata-我明白,但我说的是亚当的答案。它在Expresso中对我不起作用。parseInt(aNumber,10)//别忘了基数,否则你会感到惊讶的。玩得好,先生。玩得好。虽然我同意在大多数情况下,这将是一个远优于正则表达式的解决方案,但更好的解决方案是通过UI(dropdownlist Anywhere?)限制输入然而,问题是关于一个正则表达式。只是因为问题是关于正则表达式并不意味着正确答案是一个格式良好的正则表达式。@ KRIS-DROPDONS不会阻止人们向服务器提交任何值。@实际上,因为这是正在解析的用户输入,所以我会考虑基数。此处为必填项。您永远无法知道它们将输入什么。“^”和“$”都应替换为“\b”。含义相同,但您可以将其全局应用于完整字符串。错误。/^-1|[2-9]|10 | 99$/将匹配字符串开头的-1,或任何地方的2,3,4,5,6,7,8,9,或任何地方的10,或字符串末尾的99。也许您的意思是:/^(-1 |[2-9]| 10 | 99)$/(您的第一个regexp也是错误的)我刚刚发现我的测试用例不够广泛,这使您在这两个方面都是正确的。我已经修改了代码片段。
/^(-1|[2-9]|10|99)$/ // will match -1, 2-10, 99