[筆記] JavaScript 將各國的數字顯示模式轉換回電腦端能辨別的數字格式

章節連結

近期在執行將 DB 回傳的數字,根據瀏覽器所提供的語系來決定顯示方式,那麼有沒有反向從顯示數字轉回 DB 內的數字儲存格式呢?網路上有找到一個這樣的轉換實作,值得筆記下來。
javascript es6 logo


內容

根據 Mike Bostock 的這篇:https://observablehq.com/@mbostock/localized-number-parsing,將其調整成能通過 TypeScript 的版本

1. 運用 Intl.NumberFormat.formatToParts 方法,來取得一個物件,內含某個區域的 integer, decimal 和 fraction 類型和值。後續會用到的是 integer 和 decimal

2. 接著用 […new Intl.NumberFormat(locale, {useGrouping: false}).format(9876543210)].reverse(),來生成該語系下對應阿拉伯數字的 0 ~ 9 是怎麼顯示的

3. 接著生成一組 Map 的 Index 來對應上述的 numerals

4. 生成 group (在數字顯示時,分群的符號) 的正則表達式。以 en-us 而言,這會是 “,” ;若以 de-de 而言,這會是 “.”
5. 同理,生成 decimal 的正則表達式,代表該地區是如何表示小數點的
6. 生成一個將所有代表該地區數字的 0-9 的正則表達式
7. 接著撰寫一個在方便在 Map 中找尋文字對應的函式

所以,程式碼就會是以下這樣:


參考資料

1. Can I use Search NumberFormat
2. Localized Number Parsing

按讚加入粉絲團

延伸閱讀