2013-02-07 61 views
0

我试过这个。这只接受整数。我想既是消极的也是非消极的。Jquery接受负值和非负值

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

你能告诉我什么样的HTML元素是'$('。spinner')'? – kidwon

+0

@PeterHerdenborg是的,它应该。他只需要删除非数字,如果它包含非数字。 – Barmar

+0

是的,抱歉,我弄错了,这就是为什么我删除了我的评论。 –

回答

0

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

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

通过添加额外的“ - ”在REG-EX:第一种是指定一个范围,第二一个实际的字符。

您还可以细化的全过程,始终将值设置为:匹配的一切:

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

启动线由什么或 - 随后的数字继承,至少一个或多个。

0

没有必要进行匹配和替换。取而代之的

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

使用

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

我假设你只希望找到在该领域一个整数。

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); 
    } 
}); 

这将检查每一个时间,如果该值有效的整数当无效时,恢复通过验证的先前值。

请注意使用​​而不是parseInt(),这是由于后面允许像“5a”这样的东西被解析为5而Number("5a")将给出NaN值。

Live test case