parse-localized-number
Version:
An npm package for number formatting and parsing based on different browser region settings.
2 lines (1 loc) • 948 B
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=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])),u=o.find(e=>e.type==="group")?.value||"",p=o.find(e=>e.type==="decimal")?.value||"",c=new RegExp(`[${u.replace(/\s/g,"\\s").replace(/\./g,"\\.")}]`,"g"),l=new RegExp(`[${p.replace(/\./g,"\\.")}]`),i=new RegExp(`[${n.join("")}]`,"g"),m=e=>t.get(e);return{parse:e=>(e=e.trim().replace(c,"").replace(l,".").replace(i,a=>m(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=s(n).parse(r)),typeof r=="number"&&(t=Number(r)),Number.isNaN(t)?"The result is not a number":t.toLocaleString(n)};exports.createNumberParser=s;exports.formatNumber=g;