我正在尝试格式化数字,因此每三个数字之间都有逗号。然而,它非常小故障,一旦达到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);
});
感谢任何帮助!
答案 0 :(得分:25)
我即兴创作评论中的答案。您需要的是以下代码。看看这个,还有小提琴:
$(document).on('keyup', '.test', function() {
var x = $(this).val();
$(this).val(x.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ","));
});
它不起作用的原因是,一旦你进行了更改,你需要删除所有的逗号,并再次进行格式化,这在OP的代码和其他答案代码中都没有。
答案 1 :(得分:9)
答案 2 :(得分:5)
你的问题是当你到达第8位时,中间结果中已经有两个逗号。然而,
val = val.replace(',', '');
只替换第一个。您需要提供一个带有global标志的正则表达式:
val = val.replace(/,/g, '');
答案 3 :(得分:1)
var number = 1000000;
console.log(new Intl.NumberFormat().format(number));
// 1,000,000
您的问题的解决方案:https://jsfiddle.net/mf2s48jo/
答案 4 :(得分:0)
我知道,这是一个老问题。但是,即使文本变长或变短,我也希望将光标保持在数字内的相同位置,具体取决于要添加或删除的逗号数。最后,这就是我所使用的。现在,如果将光标放在输入字段中的任何位置并进行更改,它将不会将光标移动到数字的末尾或在数字内跳来跳去。
jQuery(document).on('keyup', '.number-format', function(_e) {
var _x = jQuery(this).val();
var _cursor = _e.target.selectionStart;
var _length = _x.toString().replace(/,/g, "").length;
var _commas = _x.length - _length;
jQuery(this).val(_x.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ","));
var _newLength = _x.toString().replace(/,/g, "").length;
var _newCommas = jQuery(this).val().length - _newLength - _commas;
if (_newLength == _length && _newCommas == 0) {
_e.target.setSelectionRange(_cursor, _cursor);
}else{
_e.target.setSelectionRange(_cursor - (_newLength - _length) + _newCommas, _cursor - (_newLength - _length) + _newCommas);
}
});