修改正则表达式以允许负数

时间:2016-03-30 17:18:59

标签: javascript jquery regex

我发现这个脚本对我来说是一个完美的解决方案,只需几行代码,而不必安装另一个插件来格式化数字。

$(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, ".")
        ;
   });
});

现在我有问题我需要脚本也允许负数。我怎么能改变它?

4 个答案:

答案 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, ".");

});