7
votes

Vérification si la valeur d'un champ de texte est entier en JavaScript

Comment puis-je vérifier est un texte saisi dans une zone de texte est un entier ou non? J'ai utilisé la fonction NAN mais cela accepte également les valeurs décimales.

Comment puis-je faire cela? Y a-t-il une méthode intégrée?


7 Réponses :


17
votes

Disons que le champ de texte est référencé par la variable intfield code>, vous pouvez le vérifier comme ceci:

var value = Number(intfield.value);
if (Math.floor(value) == value) {
  // value is an integer, do something based on that
} else {
  // value is not an integer, show some validation error
}


1 commentaires

Cela traitera des chaînes vides, ou celles ne contenant que des espaces blanche, comme des entiers valides. Si infield.value est "" (chaîne vide), alors numéro ("") retourne 0 et math.floor (valeur) == valeur retourne vrai. Il retourne également true si la valeur est laissée comme une chaîne vide.



0
votes
var num = document.getElementById("myField").value;
if(/^\d+$/.test(num)) {
    // is an int
}

4 commentaires

Vous ne pouvez pas correspondre à une expression régulière contre un numéro.


Je viens de me débarrasser de la parseint, réalisa que c'était faux. Merci Brian.


Les entiers négatifs ne sont pas manipulés


@mplungjan - c'est aussi vrai.



1
votes

expressions régulières serait un moyen: xxx pré>

Exemple complet avec mises à jour: p>

http://rgagnon.com/jsDétails/js-0063.html p> xxx pré>


mise à jour à Manipulez les espaces - ce qui éventuellement n'est pas autorisé dans la validation, mais ici, il est de toute façon: Possible de continuer à utiliser le code du lien que j'ai donné (gauchetrim / droitetrim) mais ici, je réutilise la fin de . Trim () Dans JavaScript ne fonctionne pas dans IE P>

function ignoreLeadingAndtrailingWhitespace( strValue ) {
  return strValue.length>0?validateInteger( strValue.trim() ):false;
}

if(typeof String.prototype.trim !== 'function') { 
  String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, ''); 
  }
}


function validateInteger( strValue ) {
/************************************************
DESCRIPTION: Validates that a string contains only
    valid integer number.

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
**************************************************/
  var objRegExp  = /(^-?\d\d*$)/;

  //check for integer characters
  return objRegExp.test(strValue);
}


3 commentaires

Vous avez un groupe de capture inutile, qui n'a pas trop d'importance que vous utilisez simplement test , mais est toujours impair. De plus, il ne tient pas compte des espaces sur le début ou la fin.


Dites que Gagnon;) Je ne suis que le messager ici, mais le point prenant - mettre à jour dessus


Mis à jour, cependant, il pourrait s'agir de considérer que cela ne soit pas valide dans une validation pour les entiers uniquement



0
votes

Les données de formulaire sont toujours du texte. Ma suggestion est que vous l'analysez comme entier et que vous le comparez à l'original:

Integers: 0, 10, -12
Not integers: not a number, 3.14, -0.34, 2e10, 34foo, foo34


2 commentaires

J'appelle Overkill par rapport à / ^ -? \ D \ d * $ / et où est votre fonction?


Bien sûr, deux lignes sont surchargées par rapport à une ligne parce que c'est exactement deux fois comme code. Honte sur moi. (Avez-vous vraiment besoin d'aide pour encapsuler cela dans une fonction?)



0
votes

Si vous recherchez un entier ou une décimale, vous pouvez choisir:

function IsNumeric(input)
{
   return (input - 0) == input && input.length > 0;
}


1 commentaires

Cela rend vrai pour une chaîne contient un espace. Vous devez couper l'entrée avant appel de la longueur: ... && input.trim (). Longueur> 0



1
votes
// validate if the input is numeric and between min and max digits
function validateNumberSize(inputtxt, min, max)
{
    var numbers = /^[0-9]+$/;
    if(inputtxt.match(numbers))
    {
        if(inputtxt.length >= min && inputtxt.length <= max)
        {
            return true;
        }
    }
    return false;
}

0 commentaires

0
votes

meilleur pour utiliser l'expression régulière comme suit: xxx

juste une démonstration de test: xxx


0 commentaires