2009-08-13 17 views
60

Ho un semplice textbox in cui gli utenti inseriscono il numero.
jQuery ha una funzione isDigit che mi permetterà di mostrare una finestra di avviso se gli utenti inseriscono qualcosa di diverso dalle cifre?verifica se il numero inserito è una cifra in jquery

Il campo può avere anche punti decimali.

+0

in modo da significare * e non * * cifre? –

risposta

83

Io suggerirei di usare espressioni regolari:

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

oppure una singola espressione regolare come da suggerimento di @Platinum Azure:

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

anche il numero può avere decimali. 5001.10 dovrebbe essere accettabile – Omnipresent

+0

@Omnipresent - mi spiace, ma hai detto isDigit, lo modifico. – karim79

+4

Dovrebbe averlo specificato. :-) Puoi usare un'espressione regolare come questa per TUTTI (beh, molti) numeri possibili: '/^[+-]?\d+(\.++)?([eE][+-]?\d+)? $/'Ciò consentirà decimali, segni e persino notazioni scientifiche alla fine, se lo si desidera. Puoi rimuovere varie parti come necessario (espressioni regolari in stile Perl di Google se hai bisogno di aiuto per capire quale parte è cosa, ma dovrebbe essere abbastanza intuitiva). –

0

jQuery è un insieme di funzioni JavaScript, giusto? Quindi puoi utilizzare il supporto di espressioni regolari di JavaScript per convalidare la stringa. Puoi metterlo in una callback jQuery, se lo desideri, dato che quelli prendono solo corpi funzione dichiarati in modo anonimo e le funzioni sono ancora JavaScript.

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

1

convalida Valore non sarebbe una responsabilità di jQuery. È possibile utilizzare puro JavaScript per questo. Due modi che mi vengono in mente sono:

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

Poiché il secondo esempio utilizza == e non ===, non digitare la coercizione sul lato destro perché l'espressione sia vera sempre? –

+1

Non so perché nessuno ha risposto a questa risposta. Ho usato Number (valore) .... È perfetto. –

+0

@systemPAUSE La menzione di input dell'utente e "cifre" mi fa pensare che il valore sia una stringa e il motivo per '=='. –

69

Dimenticare le espressioni regolari. JavaScript ha una funzione built-in per questo: 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 

Basta chiamare in questo modo:

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

isNaN non garantisce che il tuo input non contenga spazi bianchi. isNaN ("42") === false –

+1

Puoi tagliare lo spazio bianco con qualcosa del tipo: YouValue.replace (/^\ s \ s * /, '') .replace (/ \ s \ s * $ /, ''); Ulteriori implementazioni dell'assetto: http://blog.stevenlevithan.com/archives/faster-trim-javascript – doomspork

+0

Approccio interessante, ma personalmente penso che l'espressione regolare sia più chiara del doppio negativo (non un Not-a-Number è un numero). Anche se sarei incline a mettere la regex in una bella funzione di utilità isDigit(). –

1

Con validation plug-in jQuery si potrebbe fare qualcosa di simile, partendo dal presupposto che la forma è chiamata forma e il valore di convalidare è chiamato nrInput

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

Gestisce anche i valori decimali.

8

c'è un modo più semplice di verificare se una variabile è un numero intero. puoi usare la funzione $ .isNumeric(). per esempio.

$.isNumeric(10);  // true 

questo restituirà vero ma se si inserisce una stringa al posto del 10, si otterrà falso.

Spero che questo funzioni per voi.

2

Lo script seguente può essere utilizzato per verificare se il valore è intero valido oppure no.

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

utilizzo

'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

Puoi aggiungere una spiegazione piuttosto che semplicemente postare il codice? – namezero

Problemi correlati