Javascript 如何清理JS评估输入? a=“79*2245+(79*2-7)”; b=“”; c=[“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“0”、“+”、“-”、“/”、“*”]; 对于(i=1;i

Javascript 如何清理JS评估输入? a=“79*2245+(79*2-7)”; b=“”; c=[“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“0”、“+”、“-”、“/”、“*”]; 对于(i=1;i,javascript,eval,Javascript,Eval,尝试捕获eval可能抛出的异常,如下所示: a="79 * 2245 + (79 * 2 - 7)"; b=""; c=["1","2","3","4","5","6","7","8","9","0","+","-","/","*"]; for (i=1;i<a.length;i++){ for (ii=1;i<c.length;i++){ b=(a.substring(0,i))+(c[ii])+(a.substring(i+1,a.length)); aler

尝试捕获eval可能抛出的异常,如下所示:

a="79 * 2245 + (79 * 2 - 7)";
b="";
c=["1","2","3","4","5","6","7","8","9","0","+","-","/","*"];
for (i=1;i<a.length;i++){
  for (ii=1;i<c.length;i++){
    b=(a.substring(0,i))+(c[ii])+(a.substring(i+1,a.length));
    alert(eval(b.replace(" ","")));
  }
}

尝试捕获eval可能引发的异常,如下所示:

a="79 * 2245 + (79 * 2 - 7)";
b="";
c=["1","2","3","4","5","6","7","8","9","0","+","-","/","*"];
for (i=1;i<a.length;i++){
  for (ii=1;i<c.length;i++){
    b=(a.substring(0,i))+(c[ii])+(a.substring(i+1,a.length));
    alert(eval(b.replace(" ","")));
  }
}

您可以检查一些特殊情况,避免使用regex或类似的行为,但绝对没有办法“如果它正常崩溃,请忽略它”

这类似于mellamokb所说的停止问题,除了运行脚本之外,没有办法知道脚本是否运行到完成

我们应该非常小心地检查进入
eval
的任何字符串,并尽可能避免用户输入,除了真正简单和可验证的东西,如整数值。如果你能找到一种方法绕过
eval
,那就更好了

对于计算示例,您可能最好将其正确解析为标记,然后从那里开始,而不是以字符串形式进行计算


PS-如果你真的想检查一下
a
中表达式的这些一次性的,那么使用
eval
ee是有点有趣的,尽管它有缺点。你能解释一下为什么在评估之前立即修剪空白吗?我不相信我能想到它会影响结果的情况。对于(至少大多数)有效表达式它没有什么区别,虽然它可能会改变一些无效的情况,但我想不出有什么情况它会如此有意义

你可以检查一些特殊情况并避免使用正则表达式或类似的行为,但绝对没有办法“如果它正常崩溃,就忽略它”

这类似于mellamokb所说的停止问题,除了运行脚本之外,没有办法知道脚本是否运行到完成

我们应该非常小心地检查进入
eval
的任何字符串,并尽可能避免用户输入,除了真正简单和可验证的东西,如整数值。如果你能找到一种方法绕过
eval
,那就更好了

对于计算示例,您可能最好将其正确解析为标记,然后从那里开始,而不是以字符串形式进行计算


PS-如果你真的想检查一下
a
中表达式的这些一次性的,那么使用
eval
ee是有点有趣的,尽管它有缺点。你能解释一下为什么在评估之前立即修剪空白吗?我不相信我能想到它会影响结果的情况。对于(至少大多数)有效表达式它没有什么区别,虽然它可能会改变一些无效的情况,但我想不出它有意义的情况。不要使用
eval
。总是有更好的解决方案。你想检查
a
中表达式的每一个字符变化是否正确?我还需要找到解决每一个问题,然后检查它是否等于某个值。不要使用
eval
。您的问题总是有更好的解决方案。是否要检查
a
中表达式的每一个字符变化是否正确?我还需要找到每个字符的解决方案,然后检查它是否等于某个值卢。