parse-localized-number
Version:
An npm package for number formatting and parsing based on different browser region settings.
19 lines (18 loc) • 1.04 kB
JavaScript
const m = (r) => {
const o = new Intl.NumberFormat(r).formatToParts(12345.6), n = [
...new Intl.NumberFormat(r, { useGrouping: !1 }).format(9876543210)
].reverse(), t = new Map(n.map((e, a) => [e, a])), s = o.find((e) => e.type === "group")?.value || "", p = o.find((e) => e.type === "decimal")?.value || "", u = new RegExp(`[${s.replace(/\s/g, "\\s").replace(/\./g, "\\.")}]`, "g"), c = new RegExp(`[${p.replace(/\./g, "\\.")}]`), l = new RegExp(`[${n.join("")}]`, "g"), i = (e) => t.get(e);
return {
parse: (e) => (e = e.trim().replace(u, "").replace(c, ".").replace(l, (a) => i(a)), e ? +e : NaN)
};
}, g = (r, o) => {
if (typeof r != "number" && typeof r != "string")
return "The result is not a number";
const n = o || (typeof window < "u" ? window.navigator.language : "en-US");
let t;
return typeof r == "string" && (t = m(n).parse(r)), typeof r == "number" && (t = Number(r)), Number.isNaN(t) ? "The result is not a number" : t.toLocaleString(n);
};
export {
m as createNumberParser,
g as formatNumber
};