繁体   English   中英

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

[英]Modify regular expression to allow negative numbers

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

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

现在我有一个问题,我需要脚本也允许负数。 我该如何更改?

也许您正在寻找这样的东西:

 return value
    .replace(/(?!^-)[^0-9]/g, "")
    .replace(/\B(?=(\d{3})+(?!\d))/g, ".")
    ;

在第一个替换中,它将替换单词开头的除数字和连字符以外的所有内容。 我不知道这是否能解决您的问题。

我认为这是我能想到的最直接的更改,因为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, ".");
});

我认为这更符合您的需求。 我写了一个正则表达式,它只允许数字/数字,但也允许负数。 它对值使用JS match方法。 返回值是一个数组,因此您必须从零索引中获取结果。

$(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];
   });
});

正则表达式应该处理负号-也。 请试试:

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

});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM