我想将字符串重新格式化为数字
如果使用美元,则所有内容都可以从带有会计库的包装箱中获得,但是例如对于俄罗斯卢布,则失败。
字符串示例为1,00 руб. (RUB)
和$20.00 (USD)
因此,我可以解析这些字符串并获取货币代码(以防万一我可能需要将其提供给库),例如以下代码:
我尝试过会计和数字图书馆
// getting currency code
let init = (data.orderAmount).indexOf('(')
let fin = (data.orderAmount).indexOf(')')
console.log(data.orderAmount).substr(init + 1, fin - init - 1)
例如,如果我将1,00 руб. (RUB)
传递到accounting.unformat,我将得到100
而不是1
,但对于usd示例,它将起作用并且结果将产生20
。与numbro相同的结果,在这种情况下,只需要删除()
中的部分即可。
我真正想要的是解决方案,我可以传递货币代码和字符串,并从字符串中获取给定货币的正确数字。
我尝试全球化库numberParser
和currencyFormatter
,但没有成功
答案 0 :(得分:0)
let text_1 = '1,00 руб. (RUB)';
let text_2 = '$20.00 (USD)';
console.log( text_1.match(/\d+(\,|\.)/g)[0].replace(/\,|\./g, '') )
console.log( text_2.match(/\d+(\,|\.)/g)[0].replace(/\,|\./g, '') )
您可以尝试使用此代码吗?它匹配数字直到.
或,
并替换它们。
答案 1 :(得分:0)
function reverseFormatNumber(val,locale){
var group = new Intl.NumberFormat(locale).format(1111).replace(/1/g, '');
var decimal = new Intl.NumberFormat(locale).format(1.1).replace(/1/g, '');
var reversedVal = val.replace(new RegExp('\\' + group, 'g'), '');
reversedVal = reversedVal.replace(new RegExp('\\' + decimal, 'g'), '.');
return Number.isNaN(reversedVal)?0:reversedVal;
}
console.log(reverseFormatNumber('1,00','ru'));```
仍然需要从1,00 руб. (RUB)
字符串中截取一部分,但这应该不是问题
答案 2 :(得分:0)
看到您的必要性,我可以提出一些更详细的内容。代码以根据您输入的货币设置货币格式
const data = [{
'orderAmount': '1,00 руб. (RUB)'
}, {
'orderAmount': '$20.00 (USD)'
}]
const getCurrency = (abbr) => {
const enumerable = {
rub: 'ru-RU',
usd: 'en-US'
}
try {
return enumerable[abbr.toLowerCase().substr(1,3)]
} catch {
throw new Error ('Invalid currency')
}
}
const getCurrencyCode = (abbr) => abbr.toUpperCase().substr(1,3)
const sanitizeCurrency = (value) => {
const sanitized = value.replace(',','.').match(/\d+/g).join('.')
return Number(sanitized);
}
const currency = data.map(item => {
const newItem = item.orderAmount.split(' ');
const options = {
style: 'currency',
currency: getCurrencyCode(newItem[newItem.length - 1]),
};
const numeralFormat = new Intl.NumberFormat(
getCurrency(newItem[newItem.length - 1]),
options
)
return numeralFormat.format(sanitizeCurrency(newItem[0]))
})
console.log(currency)
如果您想玩它Boxy Types: Inference for Higher-rank Types and Impredicativity