我在jsfiddle下面找到了这个代码,在我的拙劣意见中,这个代码非常好。 但它没有格式化负数,只有正数。 我试图修改它,但我的正则表达式知识还不够。 任何人都可以帮我修改这个以格式化正数和负数吗?
$('#valor').keyup(function(){
var v = $(this).val();
v = v.replace(/\D/g,'');
v = v.replace(/(\d{1,2})$/, ',$1');
v = v.replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.');
v = v != '' ? 'R$ '+ v : '';
$(this).val(v);
});
答案 0 :(得分:1)
您可以在开始时检查并查看该值是否为负数,并在最后添加该符号:
scanf
编辑:这是一个更“纯粹”的正则表达式解决方案:
$('#valor').keyup(function(){
let v = $(this).val();
const neg = v.startsWith('-');
v = v.replace(/[-\D]/g,'');
v = v.replace(/(\d{1,2})$/, ',$1');
v = v.replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.');
v = v != ''?'$ '+v:'';
if(neg) v = '-'.concat(v); // prepend the dash
$(this).val(v);
});
基本上,在第一个替换语句中,您将$('#valor').keyup(function(){
let v = $(this).val();
v = v.replace(/[^-\d]/g, '');
v = v.replace(/(\d{1,2})$/g, ',$1');
v = v.replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.');
v = v ? '$ ' + v : '';
$(this).val(v);
});
添加到而不是被替换的字符集中,即不是数字或短划线的所有内容都将被替换为这个新版本中'-'
。