2009-08-13 8 views
60

J'ai un simple textbox dans lequel les utilisateurs entrent le numéro.
Est-ce que jQuery a une fonction isDigit qui me permettra d'afficher une boîte d'alerte si les utilisateurs saisissent autre chose que des chiffres?vérifier si le nombre entré est un chiffre en jquery

Le champ peut également contenir des points décimaux.

+0

donc vous dire nombres * * et * pas * chiffres? –

Répondre

83

Je suggère d'utiliser les expressions rationnelles:

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

Ou avec une seule regex selon la suggestion de @Platinum Azure:

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

le nombre peut également avoir des décimales. 5001.10 devrait être acceptable – Omnipresent

+0

@Omnipresent - désolé, mais vous avez dit isDigit, je vais modifier. – karim79

+4

Devrait avoir spécifié cela. :-) Vous pouvez utiliser une regex comme ceci pour TOUS (bien, beaucoup) nombres possibles: '/^[+-]?\d+(\.\d+)?([[E>[+-]?\d+)? $/'Cela permettra des décimales, des signes, et même la notation scientifique à la fin si vous le souhaitez. Vous pouvez supprimer différentes parties selon vos besoins (expressions régulières de style Perl de Google si vous avez besoin d'aide pour déterminer quelle partie est quoi, mais cela devrait être assez intuitif). –

0

jQuery est un ensemble de fonctions JavaScript, non? Vous pouvez donc utiliser le support d'expressions régulières de JavaScript pour valider la chaîne. Vous pouvez le mettre dans un rappel jQuery si vous le souhaitez, car ceux-ci ne prennent que des corps de fonctions déclarés anonymement et les fonctions sont toujours JavaScript.

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

1

validation de la valeur ne serait pas une responsabilité de jQuery. Vous pouvez utiliser du JavaScript pur pour cela. Deux façons qui me viennent à l'esprit sont:

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

Puisque votre deuxième exemple utilise == et non ===, ne taperait-il pas de coercition sur le côté droit pour que l'expression soit toujours vraie? –

+1

Je ne sais pas pourquoi personne n'a augmenté cette réponse. J'ai utilisé le nombre (valeur) .... C'est parfait. –

+0

@systemPAUSE La mention de l'entrée de l'utilisateur et des "chiffres" me fait penser que la valeur est une chaîne et la raison de '=='. –

69

Oubliez les expressions régulières. JavaScript a une fonction builtin pour cela: 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 

simplement appeler comme ceci:

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

isNaN ne garantit pas que votre entrée ne contient pas d'espace. isNaN ("42") === false –

+1

Vous pouvez découper les espaces avec quelque chose comme: YouValue.replace (/^\ s \ s * /, '') .replace (/ \ s \ s * $ /, '') Plus d'implémentations trim: http://blog.stevenlevithan.com/archives/faster-trim-javascript – doomspork

+0

Approche intéressante, mais personnellement, je pense que l'expression rationnelle est plus claire que le double négatif (pas un not-a-nombre est un nombre). Bien que je serais enclin à mettre l'expression rationnelle dans une belle fonction utilitaire isDigit(). –

1

avec le plugin validation jQuery vous pouvez faire quelque chose comme cela, en supposant que la forme est appelée forme et la valeur de valider est appelée nrInput

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

Cela gère également les valeurs décimales.

8

Il existe un moyen plus simple de vérifier si une variable est un nombre entier. vous pouvez utiliser la fonction $ .isNumeric(). par exemple.

$.isNumeric(10);  // true 

Ceci retournera vrai mais si vous mettez une chaîne à la place du 10, vous obtiendrez faux.

J'espère que cela fonctionne pour vous.

2

Le script suivant peut être utilisé pour vérifier si la valeur est valide en nombre entier ou non.

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

utilisation

'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

Pourriez-vous également ajouter une explication plutôt que d'afficher du code? – namezero

Questions connexes