我在表单上有一个字段,其中包含以下值:-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样式)。我不 在这里使用一个;我可以切换到案例陈述。但似乎我应该能够在这里使用正则表达式,这似乎是一件合理的事情。当谈到正则表达式时,我仍然很绿;
答案 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 *”部分。