的问题是不确切当的最后两位数字是不添加小数和.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