使用 jquery 和正则表达式格式化正负十进制数
Format positive and negative decimal numbers with jquery and regex
我在 jsfiddle 找到了下面这段代码,在我看来,它非常好。
但它不格式化负数,只格式化正数。
我试图修改它,但我的正则表达式知识还不够。
谁能帮我修改这个格式正数和负数?
$('#valor').keyup(function(){
var v = $(this).val();
v = v.replace(/\D/g,'');
v = v.replace(/(\d{1,2})$/, ',');
v = v.replace(/(\d)(?=(\d{3})+(?!\d))/g, '.');
v = v != '' ? 'R$ '+ v : '';
$(this).val(v);
});
你可以在开始的时候检查一下这个值是否为负数,然后在最后重新添加符号:
$('#valor').keyup(function(){
let v = $(this).val();
const neg = v.startsWith('-');
v = v.replace(/[-\D]/g,'');
v = v.replace(/(\d{1,2})$/, ',');
v = v.replace(/(\d)(?=(\d{3})+(?!\d))/g, '.');
v = v != ''?'$ '+v:'';
if(neg) v = '-'.concat(v); // prepend the dash
$(this).val(v);
});
编辑:这是一个更 "pure" 正则表达式的解决方案:
$('#valor').keyup(function(){
let v = $(this).val();
v = v.replace(/[^-\d]/g, '');
v = v.replace(/(\d{1,2})$/g, ',');
v = v.replace(/(\d)(?=(\d{3})+(?!\d))/g, '.');
v = v ? '$ ' + v : '';
$(this).val(v);
});
基本上,在第一个替换语句中,您将 '-'
添加到字符集中 而不是 被替换,即不是数字或字符的所有内容在此新版本中,破折号将被 ''
取代。
我在 jsfiddle 找到了下面这段代码,在我看来,它非常好。 但它不格式化负数,只格式化正数。 我试图修改它,但我的正则表达式知识还不够。 谁能帮我修改这个格式正数和负数?
$('#valor').keyup(function(){
var v = $(this).val();
v = v.replace(/\D/g,'');
v = v.replace(/(\d{1,2})$/, ',');
v = v.replace(/(\d)(?=(\d{3})+(?!\d))/g, '.');
v = v != '' ? 'R$ '+ v : '';
$(this).val(v);
});
你可以在开始的时候检查一下这个值是否为负数,然后在最后重新添加符号:
$('#valor').keyup(function(){
let v = $(this).val();
const neg = v.startsWith('-');
v = v.replace(/[-\D]/g,'');
v = v.replace(/(\d{1,2})$/, ',');
v = v.replace(/(\d)(?=(\d{3})+(?!\d))/g, '.');
v = v != ''?'$ '+v:'';
if(neg) v = '-'.concat(v); // prepend the dash
$(this).val(v);
});
编辑:这是一个更 "pure" 正则表达式的解决方案:
$('#valor').keyup(function(){
let v = $(this).val();
v = v.replace(/[^-\d]/g, '');
v = v.replace(/(\d{1,2})$/g, ',');
v = v.replace(/(\d)(?=(\d{3})+(?!\d))/g, '.');
v = v ? '$ ' + v : '';
$(this).val(v);
});
基本上,在第一个替换语句中,您将 '-'
添加到字符集中 而不是 被替换,即不是数字或字符的所有内容在此新版本中,破折号将被 ''
取代。