Как я могу преобразовать эту короткую функцию PHP в Javascript?

Как я могу реплицировать этот PHP-код в Javascript?? Он берет число вроде 2-9999 (серийный номер) и преобразует его в ЧИСЛО... 2-999 будет другим значением при преобразовании.

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

Я добавил функцию зависимости ниже

// dependency function
    /*****************************************************************************
    * CHECKS IF A STRING REPRESENTS A NUMBER
    ******************************************************************************/
    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;
    }

person JBa    schedule 01.02.2013    source источник
comment
Что такое my_isnum? Кроме того, что вы пробовали?   -  person Explosion Pills    schedule 02.02.2013


Ответы (1)


Синтаксис php очень похож на JS.

Просто возьмите переменные, удалите $ и объявите их с помощью ключевого слова var.

function esn_to_num(esn) {
    var tmp = [];
    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;
}

Затем вам нужно заменить все ваши php-функции на эквивалентные JS-функции. Найдите «javascript-эквиваленты explode, sizeof.

Выполните тот же процесс, чтобы переписать my_isnum в javascript (явно не нативная функция php).

редактировать: увидев ваше обновление, я понял, что, вероятно, уже есть хороший фрагмент кода в Stack Overflow (или где-либо еще), который будет делать то, что делает my_isnum. Либо найдите «функцию js, чтобы определить, является ли строка числом», либо задайте это в отдельном вопросе здесь.

Вы можете сделать все это в консоли Chromes javascript и продолжать повторять, пока не перестанете получать ошибки. Если вы столкнулись с определенной проблемой и застряли, это хороший повод спросить об этом в Stack Overflow.

person Zach Lysobey    schedule 01.02.2013