1

重複の可能性:
テキスト内のコンマと小数点の有無にかかわらず、数値に一致する正規表現

var regex =  /^[0-9][0-9]{0,5}$|^[0-9][0-9]{0,5}[\.][0-9]$/;

有効な値は 3,000 30,000 で、上記の正規表現にカンマが含まれているようです。取れなかった

4

1 に答える 1

2

この正規表現は、カンマが正しい場所にあるかどうかをテストします。

/^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]*)?$/

ここに入力すると検証される実際の例を見ることができます: http://jsfiddle.net/jfriend00/u9VRX/

説明として、正規表現は次のとおりです。

start of string
1-3 digits
followed by 0 or more sequences of ,nnn where n is a digit
followed by an optional sequence that starts with a period
   and consists of 0 or more digits
end of string

コンマを必要とせず、とにかく数値を解析する場合は、最初にコンマを削除して無視するのが最も簡単です。

var numStr = str.replace(/,/g, "");

無効な場合に何が問題なのかを正確に知りたい場合、純粋な正規表現を使用してそれを行うのははるかに困難です。私は問題を解決する最も簡単な方法を見つけることができず、一般的に数字の何が問題なのかを教えてくれません。そのため、最初にプレーンな JavaScript を使用します。

function checkValid(str) {
    // check for legal characters
    if (!str.match(/^[0-9,]+(\.[0-9]*)?$/)) {
        // illegal characters present
        return("illegal_chars");
    }

    // strip off trailing decimal part
    var parts = str.split(".");
    if (parts.length > 2) {
        // too many periods
        return("too_many_periods");
    }

    // split each comma segment (if there are any)
    parts = parts[0].split(",");
    if (parts.length > 1) {
        for (var i = parts.length - 1; i > 0; i--) {
            if (parts[i].length != 3) {
                // wrong number of digits between commas 
                return("wrong_digits_between_commas");
            }
        }

        if (parts[0].length > 3) {
            // wrong number of digits in first segment before first comma
            return("too many digits before first comma");
        }
    }

    // if you got here without any errors, then all commas are legal
    return("");  // indicate success
}

ここに入力すると、これが機能することがわかります:http://jsfiddle.net/jfriend00/W6FnT/

于 2012-07-17T02:32:08.370 に答える