0

我试过这个。这只接受整数。我想要消极的和非消极的。

    $(function () {
        $('.spinner').keyup(function () {
            if (this.value.match(/[^0-9]/g)) {
                this.value = this.value.replace(/[^0-9]/g, '');
            }
        });
    });
4

3 回答 3

0

无需匹配和替换。代替

if (this.value.match(/[^0-9]/g)) {
    this.value = this.value.replace(/[^0-9]/g, '');
}

利用

this.value = this.value.replace(/([+-]?\d+)/, '$1');

我假设您只希望在该字段中找到一个整数。

于 2013-02-07T13:00:39.630 回答
0

还没有测试,但你有没有尝试过这样的事情:

$(function () {
    $('.spinner').keyup(function () {
        if (this.value.match(/[^0-9-]/g)) {
            this.value = this.value.replace(/[^0-9-]/g, '');
        }
    });
});

通过在正则表达式中添加额外的“-”:第一个是指定一个范围,第二个是实际的字符。

您还可以优化整个过程并始终将值设置为:匹配的所有内容:

^[-]{0,1}[0-9]+

行的开头没有或 - 后跟连续的数字,至少一个或多个。

于 2013-02-07T12:55:47.227 回答
0

您可以继续使用正则表达式,或者如果您更喜欢在我看来更具可读性的“纯逻辑”,您可以使用这样的代码:

$('.spinner').keyup(function (evt) {
    var previousValue = $(this).data("prev") || "";
    var currentValue = this.value;
    var valid = true;
    if (currentValue.length > 0 && currentValue !== "-") {
        //having something we can check:
        var number = Number(currentValue);

        //integer only if not NaN and integer value equals
        valid = (!isNaN(number) && parseInt(number, 10) == number);
    }

    if (valid) {
        $(this).data("prev", currentValue);
    } else {
        //restore last good value:
        this.value = (previousValue.length == 0) ? "" : parseInt(previousValue, 10);
    }
});

这将每次检查该值是否为有效整数,如果无效,则恢复通过验证的先前值。

Number()注意代替的用法parseInt(),这是因为后面允许像“5a”这样被解析为5的东西,而Number("5a")会给出NaN值。

现场测试用例

于 2013-02-07T13:11:42.147 回答