使用评估返回八八章javaScript



我在HTML中有一个与JavaScript一起使用的计算器用户将其值输入一个单个输入字段,全部以十进制为单位。但是由于错误有时用户类型010而不是10,而评估给出了八粒结果

样本1:eval('20*15 8*10');结果380(正确)

样本2:eval('20*15 8*010');结果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;
}

您可以:

  • 使用Regex识别数字并删除领先0
  • 使用Regex用ParseInt识别数字和周围号(编号,10);
  • 不要使用评估并制作真正的Lexer Parser

最新更新