私はこの正規表現を使用してフロート番号を検証しています:
var reg = /\d+\.?\d+/;
しかし、これは真であると検証しています。
"11.34x"
"11.34abs"
"1a1.34abs"
は\d
数字とのみ一致する必要があります。何が起こっている?
私はこの正規表現を使用してフロート番号を検証しています:
var reg = /\d+\.?\d+/;
しかし、これは真であると検証しています。
"11.34x"
"11.34abs"
"1a1.34abs"
は\d
数字とのみ一致する必要があります。何が起こっている?
正規表現を固定しない場合、一致する部分文字列を含む文字列と一致します。
試す:
var reg = /^\d+\.?\d+$/;
^
は、テスト文字列の先頭と一致$
し、最後と一致します。したがって、その正規表現は、数字のみで最大 1 つの "." を含む文字列のみに一致します。
編集— 指摘したように、+
量指定子を使用すると、正規表現に数字が必要になります。小数点がある場合は、両側に数字が必要です。たぶんそれはあなたが望んでいることかもしれませんが、そうではないかもしれません。
この正規表現を使用します^\d+(\.\d+)?$
または^\d+([.,]\d+)?$
セパレーターはコンマまたはドットにすることができます
代わりにNumber
ラッパー/コンストラクター関数の使用を検討してください。
Number('11.34'); // => 11.34
Number('11.34x'); // => NaN
[編集]コメンター @VisioN が指摘しているように、その関数には空の文字列と純粋な空白文字列のエッジ ケースがあるため、ラッパー関数を作成することもできます。
function reallyParseFloatingPointNumber(s) {
var s = (''+s).trim();
return (s==='') ? NaN : Number(s);
}
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桁にも一致します。