1

0.1 から 999.9 の範囲の小数部分が 1 つだけの倍数をサポートする正規表現を探します

これは、次の値が許可されていないことを意味します。

0
0.0 // less than lower bound
0.19 // fraction part is 2 digits, right '9' is extra
94.11 // fraction part is 2 digits, right '1' is extra
999.90 // fraction part is 2 digits, '0' is extra
9.0 // should be 9 or 9.1, 9.0 is wrong
1000 // is higher than upper bound

許可されたもの:

1.1
55.5
999.9

私の正規表現は次のとおりです。

(^(\.[1-9])?$|(^[1-9][0-9]{0,2}?(\.[1-9])?$))$

とのような追加のゼロはサポート0.1されていません0.999.00099.0

テスト手順: ブラウザー コンソールで:

var reg = new RegExp(/(^(\.[1-9])?$|(^[1-9][0-9]{0,2}?(\.[1-9])?$))$/);
reg.test(12);

任意の助けが必要

4

7 に答える 7

1

これはどう:

var reg = new RegExp(/^\d{1,3}\.[1-9]$/);

指定したすべての肯定的および否定的なケースで機能します。

于 2013-10-28T10:48:42.297 に答える
0

正規表現を使用して数値の範囲を比較するべきではありませんが、これはあなたのケースでうまくいくはずです:

/^(?:[1-9]\d{0,2}(?:\.[1-9])?)|(?:0\.[1-9])$/

例 (アンカーなし): http://regex101.com/r/dY5pL3

于 2013-10-28T10:51:40.713 に答える
0

正規表現はまったく必要ありません。いくつかの単純な (そして正規表現よりもはるかに高速な) 数学方程式がその仕事をします:

function testNumber(number) {
    if (number < 0.1 || number > 999.9 || parseInt(10*number) != 10*number || number == parseInt(number))
        return false;

    return true;
}

alert( testNumber(12) );

ifステートメントでは、次の4 つのことを確認します。

  • は 0.1 より小さい数値です
  • は 999.9 より大きい数値です
  • 数値の小数部に複数の桁がありますか
  • 数値は整数です (小数部に数字はありません)

上記の条件のいずれかがtrue の場合、te 関数はfalseを返します。

于 2013-10-28T10:48:37.877 に答える
0

最初に正規表現を使用して数値が double であるかどうかを確認し、次に範囲内にあるかどうかを個別に確認することをお勧めします。ビジネス ロジックを Regex などで難読化すると、コードの保守が難しくなります。また、ビジネス ロジックを他の数値に更新する必要がある場合は、苦労することになります。

[-+]?([0-9]*\.[1-9]|[0-9]+)

上記の正規表現は浮動小数点を検証します。その後、ParseFloat だけを実行して、残りのロジックを比較できます。

于 2013-10-28T10:48:54.017 に答える