的問題是不確切當的最後兩位數字是不添加小數和.00
需求,並非常明確的時候最後兩位數字是小數,只有.
需要被添加在正確的地方。
下面的代碼假定與或更少的位數,.00
需要加入,否則最後2位被看作是小數並且加入.
。
運行它時,前2行是您的示例數據,下2行是示例,其中我在數字前添加了1
以說明如何處理這些長度的數字。
function convertMonetary(inp) {
return inp.replace(/^(\d*?\d{1,6})(\d{2})?$/, function(m, whole, dec) {
return whole.replace(/\B(?=(\d{3})+(?!\d))/g, "'") + ((dec!=undefined)?'.'+dec:'.00');
});
}
document.getElementById('outp').value =
'77431745 => ' + convertMonetary('77431745') + '\n' +
'774317 => ' + convertMonetary('774317') + '\n\n' +
'177431745 => ' + convertMonetary('177431745') + '\n' +
'1774317 => ' + convertMonetary('1774317')
<textarea id="outp" rows="10" style="width:100%"></textarea>
要解釋一下,爲什麼正則表達式是事情是這樣的:
(\d*?\d{1,6})
可能就一見傾心,爲什麼不只是做\d+
意義不大。問題是後者\d
的{1,6}
量詞是貪婪的,第一個\d
的量詞*?
不是,這就使得(\d{2})?
只有在連續超過6位數時纔會匹配。
哪種國家格式是它? –
會不會有其他輸入,比如'3344.34'?或'33.3'? –
在執行正則表達式之前使用[Number.prototype.toFixed(2)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed)來處理小數點。 – Aaron