Javascript 使用jquery和regex设置正数和负数十进制数的格式
我在下面找到了这段代码,在我看来,这段代码非常好。 但它不格式化负数,只格式化正数。 我试图修改它,但我的正则表达式知识还不够。 有没有人能帮我修改一下正数和负数的格式Javascript 使用jquery和regex设置正数和负数十进制数的格式,javascript,jquery,regex,currency,number-formatting,Javascript,Jquery,Regex,Currency,Number Formatting,我在下面找到了这段代码,在我看来,这段代码非常好。 但它不格式化负数,只格式化正数。 我试图修改它,但我的正则表达式知识还不够。 有没有人能帮我修改一下正数和负数的格式 $('#valor').keyup(函数(){ var v=$(this.val(); v=v.替换(/\D/g'); v=v.replace(/(\d{1,2})$/,',$1'); v=v.replace(/(\d)(?=(\d{3})+(?!\d))/g,“$1.”); v=v!=“R$”+v:“”; $(此).val(
$('#valor').keyup(函数(){
var v=$(this.val();
v=v.替换(/\D/g');
v=v.replace(/(\d{1,2})$/,',$1');
v=v.replace(/(\d)(?=(\d{3})+(?!\d))/g,“$1.”);
v=v!=“R$”+v:“”;
$(此).val(v);
});代码>您可以在开始时检查该值是否为负值,然后在末尾添加重新登录:
$('#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);
});
基本上,在第一个replace语句中,您将'-'
添加到字符集中以避免被替换,即在新版本中,所有不是数字或破折号的字符都将被'
替换。这解决了问题,但我想知道如何使用regex解决这个问题,因为它看起来更优雅。