2013-02-07 62 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