web-dev-qa-db-ja.com

JavaScriptで数字(浮動小数点を含む)を検証する方法

現在、私はこの正規表現を使用しています:

var valid = (value.match(/^\d+$/));

しかし、「0.40」または「2.43」のような数字の場合、これは機能しません。上記の正規表現をフロートにも一致するように変更するにはどうすればよいですか?

21
Click Upvote
var valid = (value.match(/^-?\d*(\.\d+)?$/));
27
mkedobbs

これには正規表現は必要ありません! isNaN は、値をNumberにキャストします。

_var valid = !isNaN(value);
_

例えば:

_!isNaN('0'); // true
!isNaN('34.56'); // true
!isNaN('.34'); // true
!isNaN('-34'); // true
!isNaN('foo'); // false
!isNaN('08'); // true
_

不本意な編集(CMSに感謝):

ブラスト型強制、!isNaN('')!isNaN(' ')!isNaN('\n\t')などはすべてtrue

空白テスト+ isNaN FTW:

_var valid = !/^\s*$/.test(value) && !isNaN(value);
_

ああ。

55
Crescent Fresh

@ Crescent Fresh アプローチを続行すると、少し前に、数値の検証を行う必要がありましたが、変数の型がわからないまま変数に数値が含まれているかどうかを確認する必要がありました。Stringこの場合のように数値を含みます(指数表記なども考慮しなければなりませんでした)、Numberオブジェクト、基本的に、型の仮定を行うことができなかったもの。

そして、暗黙的な型変換に注意する必要がありました。たとえば、@ Crescentをポイントしたとき、isNaNでは十分ではありませんでした。

// string values
!isNaN(' ') == true;
!isNaN('\t\t') == true;
!isNaN('') == true;

// boolean values
!isNaN(true) == true;
!isNaN(false) == true;

// etc..

結局、30 +単体テストのセットを書いて、それを見つけて実行することができます ここ 、そして次の関数は私のすべてのテストに合格するものです:

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}
26
CMS

これが私のRegExpバージョンです。

var n = /^[+-]?((\.\d+)|(\d+(\.\d+)?))$/;

一致

n.test('3');
n.test('3.0');
n.test('0.3');
n.test('.3');
n.test('+3');
n.test('+3.0');
n.test('+0.3');
n.test('+.3');
n.test('-3');
n.test('-3.0');
n.test('-0.3');
n.test('-.3');

一致しない

n.test('');
n.test('+');
n.test('-');
6
KLicheR

これは私が使うものです

/[\+]?([\-]?([0-9]{1,})?[\.]?[0-9]{1,})/
1
Eric

以下は、すべての&有効な非負の浮動小数点数のみを受け入れてキャプチャする正規表現です(ただし、指数は処理しません)。

((?:\d+\.\d*)|(?:\d*\.?\d+))

1、1.0、1、0.1、0.1を受け入れますが、「。」は受け入れませんまた、「。」が複数あるものもありません。

Regex101のサンプルを参照してください: https://regex101.com/r/t7eikU/1

0
GaryO

私の解決策を試すことができます:/^-?\d+(\.?\d+)?$/.test(text)

0
var valid = (value.match(/^[\d.]+$/));
0
YOU
var valid = value.match(/\d+?\.\d+/);
0
Ashish Datwani