我的Javascript代码有什么问题?

时间:2013-02-01 23:36:02

标签: php javascript-events javascript javascript-framework

这两个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;
}




?>

2 个答案:

答案 0 :(得分:4)

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;
    ....
}

答案 1 :(得分:3)

  

这两个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