1

これらの 2 つの 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;
}




?>
4

2 に答える 2

4

strlenJavascriptのようなものはありません。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;
    ....
}
于 2013-02-01T23:37:32.033 に答える