使用 jquery 和 regex 格式化正负十进制数
Posted
技术标签:
【中文标题】使用 jquery 和 regex 格式化正负十进制数【英文标题】:Format positive and negative decimal numbers with jquery and regex 【发布时间】:2017-07-10 17:39:55 【问题描述】:我在下面的jsfiddle 找到了这段代码,在我看来,这非常好。 但它不格式化负数,只有正数。 我试图修改它,但我的正则表达式知识还不够。 谁能帮我修改它以格式化正数和负数?
$('#valor').keyup(function()
var v = $(this).val();
v = v.replace(/\D/g,'');
v = v.replace(/(\d1,2)$/, ',$1');
v = v.replace(/(\d)(?=(\d3)+(?!\d))/g, '$1.');
v = v != '' ? 'R$ '+ v : '';
$(this).val(v);
);
【问题讨论】:
【参考方案1】:您可以在开始时检查该值是否为负,然后在末尾添加符号:
$('#valor').keyup(function()
let v = $(this).val();
const neg = v.startsWith('-');
v = v.replace(/[-\D]/g,'');
v = v.replace(/(\d1,2)$/, ',$1');
v = v.replace(/(\d)(?=(\d3)+(?!\d))/g, '$1.');
v = v != ''?'$ '+v:'';
if(neg) v = '-'.concat(v); // prepend the dash
$(this).val(v);
);
jsfiddle
编辑:这是一个更“纯”的正则表达式解决方案:
$('#valor').keyup(function()
let v = $(this).val();
v = v.replace(/[^-\d]/g, '');
v = v.replace(/(\d1,2)$/g, ',$1');
v = v.replace(/(\d)(?=(\d3)+(?!\d))/g, '$1.');
v = v ? '$ ' + v : '';
$(this).val(v);
);
jsfiddle
基本上,在第一个替换语句中,您将'-'
添加到字符集以不 被替换,即所有不是数字或破折号的内容都将被@987654326 替换@ 在这个新版本中。
【讨论】:
这解决了问题,但我想知道如何用正则表达式解决这个问题,因为它对我来说看起来更优雅。以上是关于使用 jquery 和 regex 格式化正负十进制数的主要内容,如果未能解决你的问题,请参考以下文章