[JS]数値チェック(マイナス符号・小数点あり)

/**
 * マイナス符号付小数点チェックを行います。
 * ・パターンマッチ 0~9、"-"、"."
 * ・パターンマッチ "-","."のみはNG
 * ・マイナス符号の数 0 or 1
 * ・小数点の数 0 or 1
 * ・整数部の桁数チェック
 * ・小数部の桁数チェック
 *
 * 例)整数部 3, 小数部 2の場合
 * -123 --> OK
 * 123 --> OK
 * 123.45 --> OK
 * -123.45 --> OK
 * 1.2 --> OK
 * - --> NG
 * 123- --> NG
 * --123 --> NG
 * 1234.56 --> NG
 * 123.456 --> NG
 * . --> NG
 * .123 --> NG
 * 123. --> NG
 * -. --> NG
 *
 * @param argValue チェック対象文字列
 * @param argIntKetasu 整数部の入力可能桁数
 * @param argDecimalKetasu 小数部の入力可能桁数
 * @return チェックOKの場合はtrue、
 * チェックNGの場合はfalse
 */
function isMinusDecimal(argValue, argIntKetasu, argDecimalKetasu)
{
    var minusFlg = false;
    var decFlg = false;
    if (argValue.match(/[^0-9|^\-|^.]/g))
    {
        // パターンマッチ 0~9,"-","."以外はNG
        return false;
    }
    if (argValue.match(/[^\-|^.]/g))
    {
    }
    else
    {
        // パターンマッチ "-","."のみはNG
        return false;
    }

    // 小数点の数を取得する
    var count = 0;
    for (var i = 0; i < argValue.length; i++)
    {
        if (argValue.charAt(i) == ".")
        {
            decFlg = true; count++;
        }
    }
    if (2 <= count)
    {
        // "."が2つ以上入力されている場合はNG
        return false;
    }

    // "-"の入力個数を取得する
    count = 0;
    for (i = 0; i < argValue.length; i++)
    {
        if (argValue.charAt(i) == "-")
        {
            minusFlg = true;
            count++;
        }
    }
    if (2 <= count || (count == 1 && argValue.charAt(0) != "-"))
    {
        // "-"が2つ以上入力されている場合はNG
        // "-"が入力されていて、かつ先頭に"-"がない場合はNG
        return false;
    }

    // 小数点以下のチェック
    if (decFlg)
    {
        // 小数点以下の桁数チェック
        var idx = argValue.lastIndexOf(".");
        var decimalPart = argValue.substring(idx);

        // 小数点以下の桁数を取得する
        var length = decimalPart.length - 1;
        if (length == 0)
        {
            // 小数点以下の入力がない場合はNG
            return false;
        }
        if (argDecimalKetasu < length)
        {
            // 小数点以下の桁数がオーバーしている場合はNG
            return false;
        }
    }

    // 整数部の桁数チェック
    var intPart = "";
    length = 0;
    if (decFlg)
    {
        // 小数点が入力された場合
        intPart = argValue.substring(0, argValue.indexOf("."));
    }
    else
    {
        intPart = argValue;
    }
    length = intPart.length;
    if (minusFlg)
    {
        // マイナスが入力された場合は-1
        length--;
    }
    if (argIntKetasu < length)
    {
        // 整数の桁数がオーバーしている場合はNG
        return false;
    }
    return true;
}

 

コメント (0件)


くろねこ研究所
http://www.blackcatlab.com/article.php/ProgFAQ-JS_isNumeric