3

フロートを検証するためのこの正規表現を見つけました。しかし、2-1がどのように受け入れられるかはわかりません。以下はtrueと評価されます。「。」の代わりに「、」を受け入れる必要があるため、parseFloatを使用できません。また。私はre2を書きましたが、同じ結果です。

var re1 = new RegExp("^[-+]?[0-9]*\.?[0-9]+$");
console.log(re1.test("2-1"));

var re2 = new RegExp("^([0-9]+)\.([0-9]+)$");
console.log(re2.test("2-1"));
4

3 に答える 3

3

場合によっては、正規表現文字列を作成するときに、バックスラッシュをエスケープする必要さえあります。"\\.*"これはもちろんバックスラッシュで実行できるため、最終的な正規表現はなどのようになります。

これを行うと、次のように正しい結果を得ることができまし

var re1 = new RegExp("^[-+]?[0-9]*\\.?[0-9]+$");
console.log(re1.test("2-1"));

var re2 = new RegExp("^([0-9]+)\\.([0-9]+)$");
console.log(re2.test("2-1"));

console.log(re1.test("2.1"));
console.log(re2.test("2.1"));​
于 2012-07-10T07:46:56.530 に答える
3

コンストラクター関数を使用して正規表現を生成する場合は、バックスラッシュをエスケープする必要があります。つまり、次のように\なり\\ます。

var re1 = new RegExp("^[-+]?[0-9]*\\.?[0-9]+$");

別のオプションは、エスケープを必要としないリテラル構文を使用することです。

var re1 = /^[-+]?[0-9]*\.?[0-9]+$/
于 2012-07-10T07:53:47.390 に答える
0

コンマ (「,」) をピリオド (「.」) に置き換えてから parseFloat を使用するのはどうですか?

于 2012-07-10T07:44:27.153 に答える