0

€、EUR、または別の通貨を含むテキスト内のすべての部分を検索して、選択した別の通貨に変換するにはどうすればよいですか?

すなわち:

  1. €、EUR、またはその他の通貨記号の左または右の数字を分離するにはどうすればよいですか?
  2. その数字そのものを変更された値に置き換えるにはどうすればよいですか?
  3. €、EUR、またはその他の通貨記号が前後にある Web ページのすべての番号にこれを適用するにはどうすればよいですか?
4

2 に答える 2

1

テキストから任意の通貨を検索し、ターゲット通貨に変換するコードの例を次に示します。

var currencies = {
    "EUR": ["€", "EUR", "EURO", "EUROS"],
    "USD": ["$", "USD", "USDOLLAR", "USDOLLARS"],
    "DEM": ["DEM", "DM", "Deutsche Mark"]
};
var rates = {
    "EUR": { USD: 1.2613, DEM: 1.96 },
    "USD": { EUR: 0.792832792, DEM: 1.54315 },
    "DEM": { USD: 0.648121, EUR: 0.51 }
};
function currencyReplacer(number, sourceCurrency, targetCurrency, currencyFormatIndex, currencySeparator) {
    var c, i, comma = /,/g;
    for (c in currencies) {
        if (currencies.hasOwnProperty(c)) {
            for (i = 0; i < currencies[c].length; i++) {
                if (currencies[c][i] === sourceCurrency) {
                    console.log(rates[c][targetCurrency], number);
                    return [Math.round(rates[c][targetCurrency] * number.replace(comma, "."), 2), currencies[targetCurrency][currencyFormatIndex || 0]].join(currencySeparator || "");
                }
            }
        }
    }
    return m;
}
function replaceCurrencies(text, sourceCurrency, targetCurrency, currencyFormatIndex, currencySeparator) {
    var prefixedRegex = new RegExp("(" + currencies[sourceCurrency].join("|") + ")\\s?(\\d+(?:(?:,|.)\\d+)?)", "gi");
    var suffixedRegex = new RegExp("(\\d+(?:(?:,|.)\\d+)?)\\s?(" + currencies[sourceCurrency].join("|") + ")", "gi");
    return text.replace(prefixedRegex, function(m, currency, number) {
        return currencyReplacer(number, currency, targetCurrency, currencyFormatIndex, currencySeparator);
    }).replace(suffixedRegex, function(m, number, currency) {
        return currencyReplacer(number, currency, targetCurrency, currencyFormatIndex, currencySeparator);
    });
}
replaceCurrencies("This function will convert currencies: €50 is less than 100 EUR which is more than 75 €", "EUR", "DEM", 1, " ");
// will output: "This function will convert currencies: 98 DM is less than 196 DM which is more than 147 DM"

これで問題を解決できますか?

編集:上記のコードを更新して、必要なターゲット通貨 DEM を含め、正規表現/置換子がプレフィックスとサフィックスの両方、および sourceCurrency をサポートするようにしました

Edit2: 10進数を処理するためにコードを再度更新しました

于 2012-06-19T07:46:07.153 に答える
0

通貨が実際に使用されているかどうかをテキストで確認する方法はありません。

たとえば、これらをどのように区別できますか。

  • ユーロ通貨は問題ありません
  • 50 € (EUR) が必要です
  • 50€とは異なります</li>
  • $についても同じ
  • この50ドルのように使用できるもの
  • またはこのように$ 50
  • または、この50ドルのように(ヨーロッパ人による)

でも、この部分はあなたにお任せします。

通貨であることがわかっている文字列がある場合は、次のように再生できます。

// Find out what's the currency used
if ( /[$]/.test( str ) ) // Currency is $
else if ( /[€]/.test( str ) ) // Currency is €

// etc. To get the number out of this string, use:
var val = /\d+/.exec( str ); // if "str === 50$", it returns "50"
于 2012-06-19T07:41:19.873 に答える