数値判定する関数

JavaScript で数値判定を行う関数。isNaNは使い物にならないのでこのような関数を自前で用意する。
Array のインスタンスを弾いているのは、[1] のような引数を防ぐため。[1]を String にキャストすると "1" となり、数値とみなされてしまうのだ。

function isNumber(value)
{
    if(value instanceof Array)
        return false;
    
    //trim
    value = String(value).replace(/^[  ]+|[  ]+$/g, '');

    if(value.length == 0)
        return false;
        
    if(isNaN(value) || !isFinite(value))
        return false;
    
    return true;
}


テスト。

isNumber(1); //true
isNumber(0); //true
isNumber(-1); //true
isNumber("1"); //true
isNumber("0"); //true
isNumber("-1"); //true
isNumber(1.1); //true
isNumber(.1); //true
isNumber("1.1"); //true
isNumber(".1"); //true
isNumber(10e-3); //true
isNumber(10e+3); //true
isNumber("10e-5"); //true
isNumber("10e+5"); //true

isNumber("10f-5"); //false
isNumber("10f+5"); //false
isNumber("1 1"); //false
isNumber(" 1 1 "); //false
isNumber(null); //false
isNumber(true); //false
isNumber(false); //false
isNumber(undefined); //false
isNumber("a"); //false
isNumber("1a"); //false
isNumber(""); //false
isNumber(" "); //false
isNumber([]); //false
isNumber([1]); //false
isNumber([1,1]); //false
isNumber({}); //false
isNumber({a:1}); //false
isNumber({a:1, b:2}); //false
isNumber(new Object()); //false
isNumber(); //false