gpt4 book ai didi

javascript - 是否有任何 JavaScript 标准 API 可以根据语言环境解析为数字?

转载 作者:行者123 更新时间:2023-11-29 20:41:35 25 4
gpt4 key购买 nike

要根据区域设置格式化数字,有一个标准的 JavaScript API:Intl.NumberFormat

但是对于反向操作,将字符串解析为数字我找不到任何支持语言环境的标准 API:

真的没有 JavaScript 标准 API 可以根据语言环境将字符串解析为数字吗?

如果没有:是否有任何成熟的市场、开源库可以这样做?

最佳答案

NPM 包 d2l-intl提供一个语言环境敏感的解析器。它已被 @brightspace-ui/intl 取代(本质上是版本 3),因此下面的一些信息可能适用于也可能不适用于其较新的咒语。

const { NumberFormat, NumberParse } = require('d2l-intl');
const formatter = new NumberFormat('es');
const parser = new NumberParse('es');
const number = 1234.5;
console.log(formatter.format(number)); // 1.234,5
console.log(parser.parse(formatter.format(1234.5))); // 1234.5

不幸的是,该库仅支持 handful of locales盒子外面。它还使用仅支持西方阿拉伯数字的 parseInt,因此对于使用不同数字系统的语言环境,您将不得不变得更聪明。 Here's one solution我通过 Mike Bostock 找到的.我不想把它归功于它,但我已经在这里复制它以供后代使用(根据我自己的喜好进行了一些细微的调整):

class NumberParser {
constructor(locale) {
const format = new Intl.NumberFormat(locale);
const parts = format.formatToParts(12345.6);
const numerals = Array.from({ length: 10 }).map((_, i) => format.format(i));
const index = new Map(numerals.map((d, i) => [d, i]));
this._group = new RegExp(`[${parts.find(d => d.type === "group").value}]`, "g");
this._decimal = new RegExp(`[${parts.find(d => d.type === "decimal").value}]`);
this._numeral = new RegExp(`[${numerals.join("")}]`, "g");
this._index = d => index.get(d);
}
parse(string) {
return (string = string.trim()
.replace(this._group, "")
.replace(this._decimal, ".")
.replace(this._numeral, this._index)) ? +string : NaN;
}
}

const formatter = new Intl.NumberFormat('ar-EG');
const parser = new NumberParser('ar-EG');
console.log(formatter.format(1234.5)); // ١٬٢٣٤٫٥
console.log(parser.parse(formatter.format(1234.5))); // 1234.5

关于javascript - 是否有任何 JavaScript 标准 API 可以根据语言环境解析为数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55364947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com