0

私はこの正規表現を使用してフロート番号を検証しています:

var reg = /\d+\.?\d+/;

しかし、これは真であると検証しています。

"11.34x"
"11.34abs"
"1a1.34abs"

\d数字とのみ一致する必要があります。何が起こっている?

4

4 に答える 4

2

正規表現を固定しない場合、一致する部分文字列を含む文字列と一致します。

試す:

var reg = /^\d+\.?\d+$/;

^は、テスト文字列の先頭と一致$し、最後と一致します。したがって、その正規表現は、数字のみで最大 1 つの "." を含む文字列のみに一致します。

編集— 指摘したように、+量指定子を使用すると、正規表現に数字が必要になります。小数点がある場合は、両側に数字が必要です。たぶんそれはあなたが望んでいることかもしれませんが、そうではないかもしれません。

于 2013-02-16T00:02:01.800 に答える
2

この正規表現を使用します^\d+(\.\d+)?$

または^\d+([.,]\d+)?$セパレーターはコンマまたはドットにすることができます

于 2013-02-16T00:08:36.953 に答える
1

代わりにNumberラッパー/コンストラクター関数の使用を検討してください。

Number('11.34'); // => 11.34
Number('11.34x'); // => NaN

[編集]コメンター @VisioN が指摘しているように、その関数には空の文字列と純粋な空白文字列のエッジ ケースがあるため、ラッパー関数を作成することもできます。

function reallyParseFloatingPointNumber(s) {
  var s = (''+s).trim();
  return (s==='') ? NaN : Number(s);
}
于 2013-02-16T00:17:11.277 に答える
0
if (!"12 34.98 ".replace(/^\s+|\s+$/g,"").match(/^\d+\.?\d+$/))
  alert("Please enter numbers in float form")
else alert ("Good Form, Old Chap!")

ああ、また間違えた!burning_LEGION は正しいです:

/^\d+(\.\d+)?$/  

1桁にも一致します。

于 2013-02-16T00:54:58.563 に答える