使用eval返回Octa而不是decimal Javascript

时间:2017-12-13 16:05:57

标签: javascript html eval

我在html中有一个可以使用javascript的计算器 用户在一个输入字段中输入其值,全部为十进制。但是对于错误,有时用户输入010而不是10和eval给出octa结果

样本1: 的eval(' 20 * 15 + 8 * 10&#39); 结果380(正确)

样本2: 的eval(' 20 * 15 + 8 * 010&#39); 结果364(错误)

我还能使用其他方法吗? 或者如何在使用eval之前将所有值转换为十进制?

这是我的代码:

function recalcula()
{
    var doc=document.forma;
     try
    {

    s_1=0;
    for(i=1;i<=9;i++)
    {
        CorrigeCampo(eval('doc.a1_'+i),0);
        abc=eval('doc.a1_'+i+'.value.replace(/,/g,"")');
        x_1=parseFloat(eval(abc));


        //x_1=parseFloat(eval(abc.replace(/\b0(\d+)\b/g, '$1')));

        if((isNaN(x_1))||(x_1==0)) 
        {
            x_1=0;
            eval('doc.a20_'+i+'.value="";');
            eval('doc.a1_'+i+'.value="";');
        }
        else
            eval('doc.a20_'+i+'.value=x_1.toFixed(4);');


        s_1+=x_1;
    }

    doc.Suma_1.value=s_1.toFixed(4);

}
catch(e)
{}

}

function CorrigeCampo(campo,def)
{

    cadenanueva="";
    valorcampo=campo.value;

    carpermitidos="0123456789.*/-+";
    for(j=0;j<valorcampo.length;j++)
    {
        act=valorcampo.substring(j,j+1);
        if(carpermitidos.indexOf(act)>=0)
        {

            cadenanueva+=act;

        }
    }
    if(cadenanueva=="")
        cadenanueva=def;
    campo.value=cadenanueva;
}

1 个答案:

答案 0 :(得分:0)

你可以:

  • 使用正则表达式识别数字并删除前导0
  • 使用正则表达式通过parseInt(数字,10)识别号码和环绕声号码;
  • 不要使用eval并制作真正的词法分析器