2

私の Web ページには、正または負の通貨形式の合計があります。

Example $5.50 or $(5.50). 

この値は、span タグ内に含まれるテキストに他なりません。私は値を読み取ってjsの数値に変換しようとしています。そこで、それに対して数学計算を実行できます。

Example $5.50 -> 5.50 and $(5.50) -> -5.50

負の通貨値を数値に変換するために、次の正規表現スクリプトを作成しました。

var regex = /^\$*?\((\d+(\.)?(\d+)?)\)$/

値の取得と変換を処理する次のメソッドがあります。

//retrieve value from template
$.fn.fieldVal = function () {
    var val;

    if ($(this).is(':input')) {
        val = $(this).val();
    } else {
        val = $(this).text();
    }    

    return convertCurrencyToNumeric(val);

};

//convert currency to numeric value
function convertCurrencyToNumeric(n) {
    var regex = /^\$*?\((\d+(\.)?(\d+)?)\)$/

    n = n.replace(/[^0-9-\.]/g, '');

    if(isNumber(n)) {
        n = parseFloat(n);
        return n;
    }
    return 0;
}

//test if numeric
function isNumber(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}

値が負であるかどうかを最初にテストし、次に負の場合は値を正規表現の結果に置き換える方法がわかりません。

4

2 に答える 2

1

注: クラスを否定することで、regEx の問題を本当に解決できます。いいえ、この問題に関するJSLintの意見はどうでもいいです。「.」の使用 遅くてぎこちなく、その特定の糸くずの落とし穴に与えられた理論的根拠はばかげています。

function convertCurrency(str){
    var negMatch = ( str.match(/(^\$-|^-\$|^$\()/g) ), //handles -$5.05 or $-5.05 too
    str = str.replace(/[^\d.]/g,''), //anything that's not a digit or decimal point
//gotcha, Europeans use ',' as a decimal point so there's a localization concern
    num = parseFloat(str);

    if(negMatch){ num *= -1; }

    return num;
}
于 2012-10-02T18:52:11.840 に答える
0
function getMoney (str) {
   var amount = str.replace(/(\$)(\()?(\d+\.\d{0,2})\)?/, 
      function (match, dollar, neg, money) {
         var negSign = neg ? "-" : ""; 
         return negSign + money;
      }
   );
   return parseFloat(amount);
}

var str1 = "$(5.50)";
var str2 = "$5.50";

console.log( getMoney(str1) );
console.log( getMoney(str2) );
于 2012-10-02T18:50:09.017 に答える