function isExpression(str)
{
try
{
eval("var v="+str);
alert(str+"="+v);return true;
}
catch(e){alert("错误的表达式:"+str);return false;}
}
Equalition="1+1-(1*(2+3))";
isExpression(Equalition)
Equalition="1+2(2+3)";
isExpression(Equalition)
{
try
{
eval("var v="+str);
alert(str+"="+v);return true;
}
catch(e){alert("错误的表达式:"+str);return false;}
}
Equalition="1+1-(1*(2+3))";
isExpression(Equalition)
Equalition="1+2(2+3)";
isExpression(Equalition)
解决方案 »
- jQuery中的document.ready和js中的window.onload速度对比
- frame区域更新问题?
- 如何让两个层内容一起变化
- 用window.open()打开一个新的页面,并而要设置这个页面的大小,位置
- 网页播放器奇怪问题
- 怎样使用脚本打开的新窗口的关闭按钮禁用?
- 怎样实现回车后光标自动移到下一个输入框?
- ▇▇▇▇▇▇向JavaScript高手诚挚请教:如何让一个含有框架的网页,要么最大化,要么最小化,不允许有其他效果?
- 如何画出直方图直方图 折线图 圆饼图
- 如何控制控件的宽度为当前值得一半?
- @@@IE和Mozilla的兼容性汇总@@@[不断追加中。。。]
- 100分求:JS计算24点算法中所有无解的情况 (为避免分数浪费,得解后加至100分)
var str="1+11*((2+3))"
var re=/^[\d-+*/()]+$/g;
var re2=/\d\(/g;
var re3=/\(/g;
var re4=/\)/g;
var re5=/[-+*/][-+*/]/g;
if (re.test(str)&&(!re2.test(str))&&(str.match(re3).length==str.match(re4).length)&&(!re5.test(str)))
{alert("ok")}
else
{alert("no")}</script>
"+3*" //教本报错
"+(4)(5)" 测试ok
"12+(13*)" 测试ok
(?<E>(?R<T>)(?R<E1>))
(?<E1>([+*/-](?R<T>)(?R<E1>))|.{0})
(?<T>(\((?R<E>)\))|(?R<number>))
(?<number>[+|-]?\d*\.?\d+(e[+-]?\d+)?)
){0}
这个可能可以用
可以匹配这样
0123456789.0e-2++.22222e-2--.2e-2/-2*(-2*(+2*+2+(.3)))
变态的四则运算。
原理用的是消除左递归。
E->TE1
E1->(+|-|*|/)TE1|e
T->(E)|NUMBER