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. p>
Comment puis-je faire cela? Y a-t-il une méthode intégrée? P>
7 Réponses :
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
}
Cela traitera des chaînes vides, ou celles ne contenant que des espaces blanche, comme des entiers valides. Si infield.value i> est "" (chaîne vide), alors numéro ("") code> retourne 0 et
math.floor (valeur) == valeur code > retourne vrai. Il retourne également true si la valeur i> est laissée comme une chaîne vide.
var num = document.getElementById("myField").value; if(/^\d+$/.test(num)) { // is an int }
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.
expressions régulières serait un moyen: Exemple complet avec mises à jour: p> http://rgagnon.com/jsDétails/js-0063.html p> 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);
}
Vous avez un groupe de capture inutile, qui n'a pas trop d'importance que vous utilisez simplement test code>, 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
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
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?)
Si vous recherchez un entier ou une décimale, vous pouvez choisir:
function IsNumeric(input) { return (input - 0) == input && input.length > 0; }
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 code>
// 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; }
meilleur pour utiliser l'expression régulière comme suit: juste une démonstration de test: p>
Il suffit de noter que Number.ISInteger I> < / a> a été ajouté dans ECMA-262 ED 6 AKA ECMAScript 2015.