2013-03-05 62 views
1

我想驗證表單輸入值。下面的功能狀態是輸入的值是一個低於150的數字,顯示錯誤。按原樣工作。不過,我想補充一點。如果該值包含除數值以外的任何其他值,並且/或者是150以下的值,則顯示錯誤...jQuery驗證,只有數值

如何修改?

if ($('.billboard-height').val() < 150) { 
    $('.sb-billboardalert').fadeIn(600); 
} 
+0

你爲什麼不只是防止數字比其他任何輸入,這樣,他們不能按上任何東西,但0-9 – 2013-03-06 00:04:50

回答

2

由於無論如何您的服務器端應該進行更全面的驗證,您可以使用parseIntparseFloat,具體取決於您期望的值。然後檢查如果結果實際上是一個數字,它也能滿足你的約束:

var number = parseFloat($('.billboard-height').val()); // or parseInt depending on expected input 
if (isNaN(number) || number < 150) { 
    $('.sb-billboardalert').fadeIn(600); 
} 

編輯:

根據您的意見,您輸入的正則表達式的土地。我收集你只想要一個自然數(parseInt/parseFloat忽略像px,em等尾隨非數字字符的方式不正確)。如何:

var val = $('.billboard-height').val(); 
var number = parseInt(val, 10); 
if (! val.match(/^[0-9]{3,4}$/) || number < 150) { 
    $('.sb-billboardalert').fadeIn(600); 
} 

這應該只允許自然數150-9999。

+0

我喜歡這個!乾淨簡單! – 2013-03-06 00:31:07

+0

簡而言之,.billboard-height是高度的像素值...但我只希望通過文本輸入輸入數字,因爲px是單獨添加的。例如,你的代碼可以防止某些輸入爲460px,但是$('。sb-billboardalert')。fadeIn(600);'不會顯示。它只會如果價值低於150 – 2013-03-06 00:42:45

+0

我想防止人們在文本字段中輸入'px,%或em'等。 – 2013-03-06 00:45:45

1

我會建議使用正則表達式:

var intRegex = /^\d+$/; 
var floatRegex = /^((\d+(\.\d *)?)|((\d*\.)?\d+))$/; 

var str = $('#myTextBox').val(); 
if(intRegex.test(str) || floatRegex.test(str)) { 
    alert('I am a number'); 
    ... 
} 

或用單正則表達式按照@Platinum Azure的建議:

var numberRegex = /^[+-]?\d+(\.\d+)?([eE][+-]?\d+)?$/; 
var str = $('#myTextBox').val(); 
if(numberRegex.test(str)) { 
    alert('I am a number'); 
    ... 
}  

裁判:checking if number entered is a digit in jquery

+1

那些正則表達式似乎過於複雜......要測試一個int,你可以確保這個正則表達式不匹配:'[^ 0-9-]'。 – jahroy 2013-03-06 00:16:14

0

嘗試parseInt函數和用於檢查isNaN功能,如果值數和小於150

var intVal = parseInt($('.billboard-height').val()); 
if(!isNaN(intVal)){ //not Number 
    if (parseInt($('.billboard-height').val()) < 150) { //not less than 150 
     $('.sb-billboardalert').fadeIn(600); 
    } 
} 
0
// Displays an alert if s contains a non-numeric character. 

function alertForNonNumeric(s) { 
    var rgx = /[^0-9]/; 
    if (s.search(rgx) !== -1) { 
     alert("Input contains non-numeric characters!"); 
    } 
} 

JS Fiddle here

注意:如果您想查詢負整數,以及,你可以一個減號添加到正則表達式:

function alertForNonNumeric(s) { 
    var rgx = /[^0-9-]/; 
    if (s.search(rgx) !== -1) { 
     alert(s + " contains non-numeric characters!"); 
    } 
} 
0

從輸入的任何值或選擇將在JavaScript字符串。您需要使用parseInt()才能使用><等運營商。 ==可如果你用它來比較字符串像if ($('.billboard-height').val() == "150")

1

使用不要忘記parseInt函數()的基數參數:

if (parseInt($('.billboard-height').val(), 10) < 150) { 

這可能比使用一個正則表達式更快。正則表達式不是很快就知道的,但它們非常強大。這種情況可能是矯枉過正的。

0

如果您需要支持浮點數,你可以檢查一個變量使用是有效的:

function isNumber (n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

var val = $('.billboard-height').val(); 
if (isNumber(val) && parseFloat(val) < 150) { 
    $('.sb-billboardalert').fadeIn(600); 
} 

如果你只需要支持整數,使用parseInt(n, 10),其中10爲基數,以字符串轉換至。

var val = parseInt($('.billboard-height').val(), 10); 
if (val && val < 150) { 
    $('.sb-billboardalert').fadeIn(600); 
} 
0

我使用這個解決方案,我發現它相當優雅 - 沒有警報,用戶有效地無法輸入非數字字符。

這是jQuery的例子:

function digitsOnly(){ 
    // extract only numbers from input  
    var num_val = $('#only_numbers').val().match(/\d+/); 
     $('#only_numbers').val(num_val); 
    } 

你的HTML:

<input type="text" name="only_numbers" id="only_numbers" on oninput="digitsOnly();"/>