2009-08-13 12 views
60

Mam prosty textbox, w którym użytkownicy wprowadzają numer.
Czy jQuery ma funkcję isDigit, która pozwoli mi wyświetlić pole alertu, jeśli użytkownicy wprowadzą coś innego niż cyfry?Sprawdzanie, czy wprowadzony numer jest cyfrą w jquery

Pole może również zawierać liczby dziesiętne.

+0

więc oznaczają numery * * * a nie cyfry *? –

Odpowiedz

83

Sugerowałbym użyciu regexes:

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

lub za pomocą jednego regex jak za sugestią @Platinum Azure:

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

liczba może zawierać również miejsca dziesiętne. 5001,10 powinno być akceptowalne. – Omnipresent

+0

@Oddawaj - przepraszam, ale powiedziałeś isDigit, będę edytować. – karim79

+4

Powinien był to określić. :-) Możesz użyć wyrażenia regularnego w ten sposób dla WSZYSTKICH (dobrze, wielu) możliwych liczb: '/^[+-]?\d+(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\+-]?\d+)? $/'To pozwoli na dziesiętne, znaki, a nawet naukową notację na końcu, jeśli chcesz. Możesz usuwać różne części, jak potrzebujesz (wyrażeń regularnych w stylu Perla, jeśli potrzebujesz pomocy w określeniu, która część jest jaka, ale powinna być dość intuicyjna). –

0

jQuery to zestaw funkcji JavaScript, prawda? Aby można było sprawdzić poprawność ciągu znaków, można użyć obsługi wyrażenia regularnego JavaScript. Możesz umieścić to w wywołaniu zwrotnym jQuery, jeśli chcesz, ponieważ te przyjmują tylko anonimowo deklarowane funkcje, a funkcje są nadal JavaScriptem.

Link: http://www.regular-expressions.info/javascript.html

1

walidacja wartości nie byłoby obowiązkiem jQuery. Do tego możesz użyć czystego JavaScript. Dwa sposoby, które przychodzą mi na myśl, to:

/^\d+$/.match(value) 
Number(value) == value 
+0

Ponieważ Twój drugi przykład używa ==, a nie ===, nie wpisałby wymuszenia po prawej stronie, ponieważ wyrażenie zawsze będzie prawdziwe? –

+1

Nie wiem, dlaczego nikt nie popierał tej odpowiedzi. Użyłem Number (value) .... Its perfect. –

+0

@systemPAUSE Wzmianka o wprowadzeniu przez użytkownika i "cyfrach" sprawia, że ​​myślę, że wartość jest łańcuchem i powodem '=='. –

69

Zapomnij o wyrażeniach regularnych. JavaScript ma wbudowaną funkcję dla tego: isNaN():

isNaN(123)   // false 
isNaN(-1.23)   // false 
isNaN(5-2)   // false 
isNaN(0)    // false 
isNaN("100")   // false 
isNaN("Hello")  // true 
isNaN("2005/12/12") // true 

Wystarczy zadzwonić to tak:

if (isNaN($("#whatever").val())) { 
    // It isn't a number 
} else { 
    // It is a number 
} 
+0

isNaN nie zapewni, że twoje dane wejściowe nie zawierają białych znaków. isNaN ("42") === false –

+1

Możesz przyciąć odstępy za pomocą czegoś takiego jak: YouValue.replace (/^\ s \ s * /, '') .replace (/ \ s \ s * $ /, ''); Więcej wykończeń implementacji: http://blog.stevenlevithan.com/archives/faster-trim-javascript – doomspork

+0

Interesujące podejście, ale osobiście myślę, że wyrażenie regularne jest bardziej przejrzyste niż podwójne negatywne (a nie numer jest liczbą). Chociaż byłbym skłonny umieścić funkcję regex w przyjemnej funkcji użytecznej isDigit(). –

1

Z validation jQuery plugin mógłby zrobić coś takiego, przy założeniu, że forma jest nazywana forma a wartość do sprawdzania nazywa nrInput

$("form").validate({ 
      errorElement: "div", 
      errorClass: "error-highlight", 
      onblur: true, 
      onsubmit: true, 
      focusInvalid: true, 
      rules:{ 
       'nrInput': { 
        number: true, 
        required: true 
       } 
      }); 

To również obsługuje wartości dziesiętne.

8

Istnieje prostszy sposób sprawdzenia, czy zmienna jest liczbą całkowitą. możesz użyć funkcji $ .isNumeric(). na przykład

$.isNumeric(10);  // true 

to się zwróci, ale jeśli umieścisz łańcuch w miejsce 10, otrzymasz fałszywe.

Mam nadzieję, że to zadziała.

2

Następujący skrypt może być użyty do sprawdzenia, czy wartość jest poprawna liczbą całkowitą czy nie.

function myFunction() { 
    var a = parseInt("10000000"); 
    if (!isNaN(a) && a <= 2147483647 && a >= -2147483647){ 
    alert("is integer"); 
    } else { 
    alert("not integer"); 
    } 
} 
1
String.prototype.isNumeric = function() { 
    var s = this.replace(',', '.').replace(/\s+/g, ''); 
return s == 0 || (s/s); 
} 

użytkowania

'9.1'.isNumeric() -> 1 
'0xabc'.isNumeric() -> 1 
'10,1'.isNumeric() -> 1 
'str'.isNumeric() -> NaN 
0
$(document).ready(function() { 



    $("#cust_zip").keypress(function (e) { 
     //var z = document.createUserForm.cust_mobile1.value; 
     //alert(z); 
     if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) { 

      $("#errmsgzip").html("Digits Only.").show().fadeOut(3000); 
      return false; 
     } 
    }); 
}); 
+0

Czy możesz dodać wyjaśnienie, a nie tylko opublikować kod? – namezero

Powiązane problemy