求一验证带括号的四则运算式的正则表达式
求一正则表达式是否符合运算规则
如: 1+6*(2+(3-1)/1+(9-5*1))
[解决办法]
- JScript code
//这里需要用到平衡组 而且只是正整数的四则混合运算,如果需要小数或者负数的 修改对应“(0|[1-9][0-9]*)”即可/^((0|[1-9][0-9]*)([-+*/](0|[1-9][0-9]*))*[-+*/]?)*(((?<K>\()((0|[1-9][0-9]*)+([+*/-](0|[1-9][0-9]*))*)+[-+*/]?)+((?<-K>\))([-+*/](0|[1-9][0-9]*)[-+*/]?)*)+)*((0|[1-9][0-9]*)([-+*/](0|[1-9][0-9]*))*)*$/
[解决办法]
可以考虑用eval,加一简单正则进行判断
- JScript code
<script>var s = '1+6*(2+(3-1)/1+(9-5*1))';if(s.match(/[^\+\-\*\/0-9()]/)){ alert('illegal!')}else{ try { alert(eval(s)); } catch(e) { alert('illegal') }}</script>
[解决办法]
可以不用正则判断
- JScript code
<script>var str = "1+6*(2+(3-1)/1+(9-5*1))";try{ eval("var ret = "+str); if(ret!=Infinity){ alert("right"); }else{ alert("wrong"); }}catch(e){ alert("wrong");}</script>
[解决办法]
真搞笑,好像正则是万能的一样
- JScript code
function test(s){ try{ return !isNaN(eval("("+s+")")); }catch(e){ return false; }}alert(test("1+6*(2+(3-1)/1+(9-5*1))"));
[解决办法]
这里用正则就是一种浪费,用eval简单又好用
[解决办法]
eval