1

次の状況を処理するために助けが必要です: ページで合計する必要があるいくつかの値がありますが、これらの値のフィールドは動的に作成されます (これらのフィールドの ID も同様です)。

値は (通貨または小数点以下の桁数に応じて) 異なる形式で表示できます。つまり、R$20.000.2 (小数点以下 1 位) または US$20.000.18 (小数点以下 2 位) または €20,000.180 (小数点以下 3 位および帝国系) です。 .

私は今まで何をしていましたか:

フィールドは動的に作成されるため、そのフィールドのスタイルに css クラスを追加し (それらは for each ループを介して生成されます)、作成した JavaScript プロトタイプ クラスを使用して、文字列を float に変換します (R を渡す場合) $20.000,02 または R$20,000.02 で、20000.02 を返します)。次のコードは、合計する必要があるページで生成されたすべてのフィールドで繰り返されます。

<script>
    var sum = 0;
    jQuery(".countTotalEffectiveMonth").each(function(){
        sum += localeUtils.s2f(jQuery(this).text().replace("R$",""));
        jQuery("#ScenarioCurrentYearSavings").text(sum);

        })
    alert(sum);

</script>

問題:

1:通貨 ("R$","") をハードコードしました (文字列から削除して計算するため)。どうすればそれを行うことができるかについてのアイデアはありますか? 正規表現を使用しようとしましたが、失敗しました:(。この正規表現(/ [^ 0-9-] / g)を使用して通貨を削除することしかできませんでしたが、連結できるように保存する方法がわかりませんでした合計の終わりに。

アップデート:

Paul S.のアプローチに従って、私はこれを行いました:

var val;
var re = /^([a-z]+)([^\d])([\d.,]+)$/i;
var m;
jQuery(".countTotalEffectiveMonth").each(function(){
    m = jQuery(this).text();
    val = re.exec(m);
    val += val[3].replace(/,/g, '');
    alert(val[1]+val[3]);
    jQuery("#ScenarioCurrentYearSavings").text(val[1]+val[3]);

});

val は null と表示されますが、実行直前に m をval = re.exec(m);出力すると、このR$91,67のような数値が出力されますが、TypeError: val is null が返されます。

何が悪いのか分かりますか?

4

1 に答える 1

1

このような正規表現はどうですか

var re = /^([a-z]+)([^\d])([\d.,]+)$/i,
    m;
m = re.exec('US$20.000,18'); // ["US$20.000,18", "US", "$", "20.000,18"]
m = re.exec('R$20,000.02');  // [ "R$20,000.02",  "R", "$", "20,000.02"]

次にm[3]、数値です。これは、より多くのロジックを使用して数値に変換できます。たとえば、次の形式の場合ですx,xxx.xx

var int = +m[3].replace(/,/g, ''); // 20000.02
于 2013-10-04T14:04:56.233 に答える