這可能是也可能不是純JS字符串函數簡單,但這裏是一個正則表達式的版本。
事情是,我找不到方法將輸入的數字字符串分組到??n nnn ... nnn nnn nn
與正則表達式匹配。不過,獲得像nn nnn nnn ... nnn n??
這樣的組織相對簡單。這是正則表達式;
/(^\d{2})|(\d{1,3})(?=\d{1,3}|$)/g
所以我反轉字符串開始如下;
Array.prototype.reduce.call(str,(p,c) => c + p)
然後應用正則表達式來我的逆轉字符串.match(rex)
將工作像,"123456789"
產生[ '98', '765', '432', '1' ]
。
那麼當然有.
和,
加入他們在適當的位置與
.reduce((p,c,i) => i - 1 ? p + "," + c : p + "." + c)
,並得到98.765,432,1
。那麼我們只需要再次反轉這個字符串。所以這裏是一個工作的例子。
function formatNumber(e){
var rex = /(^\d{2})|(\d{1,3})(?=\d{1,3}|$)/g,
val = this.value.replace(/^0+|\.|,/g,""),
res;
if (val.length) {
res = Array.prototype.reduce.call(val, (p,c) => c + p) // reverse the pure numbers string
.match(rex) // get groups in array
.reduce((p,c,i) => i - 1 ? p + "," + c : p + "." + c); // insert (.) and (,) accordingly
res += /\.|,/.test(res) ? "" : ".0"; // test if res has (.) or (,) in it
this.value = Array.prototype.reduce.call(res, (p,c) => c + p); // reverse the string and display
}
}
var ni = document.getElementById("numin");
ni.addEventListener("keyup", formatNumber);
<input id="numin" placeholder="enter number">
的res += /\.|,/.test(res) ? "" : ".0";
部分以一個前綴的"0."
醫療服務時我們只有美分。
請注意,該數字就不再有效的JavaScript數 – mplungjan
您的解決方案將採取所有數量在短期和格式化並點擊該按鈕。但是我正在看keyPress,按下按鍵時它會繼續格式化。 – Soham
@Soham檢查新鏈接,它在按鍵時有效。 – nikunjM