使用逗号的Javascript数字格式

我正在尝试格式化数字,因此它们在每3个数字之间都有逗号。 然而,它非常小故障,一旦达到8个数字就无法工作。 我已将所有代码放在下面的jsfiddle中:

function commaSeparateNumber(val){ val = val.replace(',', ''); var array = val.split(''); var index = -3; while (array.length + index > 0) { array.splice(index, 0, ','); // Decrement by 4 since we just added another unit to the array. index -= 4; } return array.join(''); }; $(document).on('keyup', '.test', function() { var value = $(this).val(); value = commaSeparateNumber(value); $(this).val(value); }); 

http://jsfiddle.net/R8JrF/

任何帮助表示赞赏!

我在评论中即兴创作了答案。 您需要的是以下代码。 看看这个,还有小提琴:

 $(document).on('keyup', '.test', function() { var x = $(this).val(); $(this).val(x.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",")); }); 

小提琴: http : //jsfiddle.net/praveenscience/R8JrF/1/

它不起作用的原因是,一旦你做了更改,你需要删除所有的逗号,并再次进行格式化,这在OP的代码和其他答案代码中都没有。

使用Number.prototype.toLocaleString(); 在这里查看

 var no = 3456; no.toLocaleString(); 

给3,456

你的问题是当你到达第8位时,中间结果中已经有两个逗号。 然而,

 val = val.replace(',', ''); 

只替换第一个。 您需要提供一个带有全局标志集的正则表达式:

 val = val.replace(/,/g, ''); 

更新,工作小提琴