我发现这个脚本对我来说是一个完美的解决方案,只需几行代码,而不必安装另一个插件来格式化数字。
$(document).on('keyup', "#importo", function (event) {
// skip for arrow keys
if (event.which >= 37 && event.which <= 40) return;
// format number
$(this).val(function (index, value) {
return value
.replace(/\D/g, '')
.replace(/\B(?=(\d{3})+(?!\d))/g, ".")
;
});
});
现在我有问题我需要脚本也允许负数。我怎么能改变它?
答案 0 :(得分:1)
也许你正在寻找这样的东西:
return value
.replace(/(?!^-)[^0-9]/g, "")
.replace(/\B(?=(\d{3})+(?!\d))/g, ".")
;
在第一个替换中,它替换了一个单词开头的数字和连字符。我不知道你的情况是否会这样做。
答案 1 :(得分:0)
我认为这是我能想到的最直接的变化,因为Javascript正则表达式不支持lookbehinds。
$(this).val(function (index, value) {
if (value.length === 1) {
value = value.replace(/\D/, '');
} else if (value.length > 1) {
value = value[0].replace(/[^-\d]/, '') + value.slice(1).replace(/\D/g, '');
}
return value.replace(/\B(?=(\d{3})+(?!\d))/g, ".");
});
答案 2 :(得分:0)
我认为这更符合您的要求。我写了一个正则表达式,只允许数字/数字,但也允许负数。它在值上使用JS匹配方法。返回是一个数组,因此您必须从零索引中获得结果。
$(document).on('keyup', "#importo", function (event) {
// skip for arrow keys
if (event.which >= 37 && event.which <= 40) return;
// format number
$(this).val(function (index, value) {
var digits = value.match(/(^-\d*)|(\d*)/g); // allows digits starting with - or just digits only.
return digits[0];
});
});
答案 3 :(得分:0)
正则表达式也应该处理负号-
。请尝试:
$(this).val(function (index, value) {
if (value.length === 1) {
value = value.replace(/\D/, '');
} else if (value.length > 1) {
value = value[0].replace(/[^-\d]/, '') + value.slice(1).replace(/\D/g, '');
}
return value.replace(/\B(?=((?:-)?(?:\d{3})+)(?!\d))/g, ".");
});