用于转换从 PHP 转换的序列号的 JavaScript 代码

Javascript code to convert serial numbers converted from PHP

本文关键字:转换 JavaScript 代码 序列号 PHP 用于      更新时间:2023-09-26

这两个Javascript函数应该将序列号(2-9999)转换为数字,但是由于某种原因,下面的函数不起作用..它们最初是用PHP编写的...适用于PHP,但不适用于Javascript。

<html>
<head>
<script type="text/javascript">
    function my_isnum(str, negative=false, decimal=false)
{
    var has_decimal = false;
    var len = strlen(str);
    if (len > 0) {
        var valid = true;
        for (var i=0; valid && i < len; i++) {
            if (!(str[i] >= "0" && str[i] <= "9")) {
                if (str[i] == "-") {
                    if (!negative || i != 0) {
                        valid = false;
                    }
                } else if (str[i] == ".") {
                    if (!decimal || has_decimal) {
                        valid = false;
                    }
                } else {
                    valid = false;
                }
            }
        }
    } else {
        valid = false;
    }
    return valid;
}
function esn_to_num(esn) {
    var tmp = [];
    if ((tmp = esn.split("-")) {
        if (tmp.length == 2
            && my_isnum(tmp[0])
            && my_isnum(tmp[1])
        ) {
            esn = ((tmp[0] << 23) | tmp[1]);
        } else {
            esn = -1;
        }
    } else {
        esn = -1;
    }
    return esn;
}
alert(2-9999);
</script> </head>
</html>

原始的 PHP 函数

<?php
function my_isnum($str, $negative=false, $decimal=false)
{
    $has_decimal = false;
    $len = strlen($str);
    if ($len > 0) {
        $valid = true;
        for ($i=0; $valid && $i<$len; $i++) {
            if (!($str[$i] >= '0' && $str[$i] <= '9')) {
                if ($str[$i] == '-') {
                    if (!$negative || $i != 0) {
                        $valid = false;
                    }
                } else if ($str[$i] == '.') {
                    if (!$decimal || $has_decimal) {
                        $valid = false;
                    }
                } else {
                    $valid = false;
                }
            }
        }
    } else {
        $valid = false;
    }
    return $valid;
}
function esn_to_num($esn)
{
    if (($tmp = explode('-', $esn))) {
        if (sizeof($tmp) == 2
            && my_isnum($tmp[0])
            && my_isnum($tmp[1])
        ) {
            $esn = (($tmp[0] << 23) | $tmp[1]);
        } else {
            $esn = -1;
        }
    } else {
        $esn = -1;
    }
    return $esn;
}


?>

Javascript中没有strlen这样的东西。请改用str.length

另外,正如Jason Sperske在下面建议的那样,更改此设置:

function my_isnum(str, negative=false, decimal=false)

对此:

function my_isnum(str, negative, decimal)
{
    if (typeof negative == "undefined") negative = false;
    if (typeof decimal == "undefined") decimal = false;
    ....
}

例如,这两个javascript函数应该将序列号(2-9999)转换为数字。

为什么不直接去掉-并解析为十进制数呢?

function padToFourDigits(_, digits) {
  return "0000".substring(digits.length) + digits;
}
function serialToNum(serialNumStr) {
  return +(serialNumStr.replace(/-('d{1,4})/g, padToFourDigits));
}

然后

serialToNum('2-9999') === 29999
serialToNum('2-999')  === 20999