-1

重複の可能性:
精度が 2 の 10 進数の単純な正規表現

こんにちは、正規表現を使用して数値を検証する必要があります。主なアイデアは、数値の整数部分、小数部分、および小数点記号があるということです。たとえば、私がこれを持っている場合:

var integer_part = 4;
var decimal_part = 2;
var decimal_separator = ".";

// will be valid numbers
// 2546.33 
// 12
// 1.33
// 263
// 0

文字列を検証するために、変数の値を使用して正規表現文字列を作成できますか?

4

3 に答える 3

3

これには正規表現は必要ありません。

!isNaN(parseFloat(n)) && isFinite(n);

数値が浮動小数点数であり、NaN ではなく、無限大でないことを確認します。

これは XY 問題のように聞こえます。あなたが尋ねるべきだったのはHow can I validate a number?、正規表現の部分を省略したことです。

于 2012-12-07T18:22:51.490 に答える
1

あなたの質問からは明確ではありませんが、変数を使用して正規表現で許容される値の範囲を決定したいと考えています。そうであれば、パターン文字列を次のように作成できます。

pattern = '/[\d]{0,' + integer_part + '}(' + decimal_separator + '[\d]{1,' + decimal_part + '})?/';

これは基本的な実装です。この場合、.セパレーターとして使用するには、実際に設定する必要がありますdecimal_separator = '\.';。これは、正規表現でワイルドカードに一致する小数点をエスケープすることです。

より多くのエッジ ケースを本当に探したい場合は、次のように条件付きでパターンを構築することをお勧めします。

pattern = '/[\d]{0,' + integer_part + '}';
if (decimal_part > 0) {
    if (decimal_separator == '.') {
        pattern += '(\.';
    } else {
        pattern +=  '(' + decimal_separator;
    }
    pattern += '[\d]';
    if (decimal_part == 1) {
         pattern += '{1}';
    } else {
         pattern += '{1,' + decimal_part + '}';
    }
    pattern += ')?';
}
pattern += '/';
于 2012-12-07T18:24:37.977 に答える
0

この正規表現を使用するだけで、

\d+(\.\d+)

ただし、もっと良い方法があるかもしれません。

Boolean isFloat=false;
try
{
   float num=parseFloat(n);
   isFloat=!isNaN(num) && isFinite(num);
}
catch (NumberFormatException ex)
{
   //Isn't a number
}
于 2012-12-07T18:22:42.730 に答える