javascript 将十进制转换为十六进制并确保它们是数字

o7jaxewo  于 2023-04-10  发布在  Java
关注(0)|答案(1)|浏览(171)

我试图在输入里程表阅读时创建一个错误捕获。似乎我的ODO值没有被转换为十六进制,并且只允许ODO值在30和39之间(而不是十六进制值30到39,它们是十进制数字0-9)。

<script language="JavaScript">
function checkFormStartShift()
{
    var vODOstart = document.startshift.odostart.value;
    vConvertHex = vODOstart.toString(16);
    var vError = "no";
    
    for (var i = 0; i < vConvertHex.length; i=i+2) 
    {
        let result = vConvertHex.substr(i, 2);
        if (result < 30 || result > 39)
        {
            alert("Starting KMs should be numbers only");
            vError = "yes";
            return false;
        }
    }
            
    if (vODOstart < 0 && vError == "no")
    {   
        return true;
    }
               
    else if (vODOstart <= 0)
    {
        alert("Starting ODO cannot be 0 or negative.  Please correct.");
        return false;
    }   
    
}
</script>
jfewjypa

jfewjypa1#

调试提示:

1.确保输入的是数字,而不是字符串
1.您正在与30和39进行比较,而不是与48和48+9进行比较。您正在考虑十六进制值“30”和“39”,但已经写入了十进制值。
1.对你的代码进行更多的检测以获得更多的信息:

function checkFormStartShift()
{
    var vODOstart = document.startshift.odostart.value;

    console.log("vODOstart:",vODOstart)
    console.log("typeof vODOstart:",typeof vODOstart)

    vConvertHex = vODOstart.toString(16);

    console.log("vConvertHex:",vConvertHex)
    
    var vError = "no";
    
    for (var i = 0; i < vConvertHex.length; i=i+2) 
    {
        let result = vConvertHex.substr(i, 2);
        if (result < 48 || result > 48+9)
        {
            alert("Starting KMs should be numbers only");
            vError = "yes";
            return false;
        }
    }
            
    if (vODOstart < 0 && vError == "no")
    {   
        return true;
    }
               
    else if (vODOstart <= 0)
    {
        alert("Starting ODO cannot be 0 or negative.  Please correct.");
        return false;
    }   
    
}

改进建议

  • 不要尝试转换为十六进制:你不会对十六进制字符做任何事情。
  • 而是将vODOstart转换为整数。
  • 你这样做似乎是为了找到不可接受的字符并拒绝输入。相反,你可以用一个“干净”的版本覆盖document.startshift.odostart.value。
function checkFormStartShift()
{
    var vODOstart = document.startshift.odostart.value;
    vConvertNumber = Math.int(vODOstart);

    if (vODOstart > 0)
    {   
        document.startshift.odostart.value = vConvertNumber;
        return true;
    }
    else 
    {
        alert("Starting ODO cannot be 0 or negative.  Please correct.");
        return false;
    }   

}

相关问题