Obtenir une valeur entière d'une zone de texte, comment vérifier si elle est NaN ou null etc?

StackOverflow https://stackoverflow.com/questions/793445

  •  16-09-2019
  •  | 
  •  

Question

Je tirais une valeur via JavaScript à partir d'une zone de texte. Si la zone de texte est vide, elle retourne NaN. Je veux retourner une chaîne vide si elle est nulle, vide, etc.

Que chèque dois-je faire? if(NAN = tb.value)?

Était-ce utile?

La solution

Hm, quelque chose de louche ici.

Dans quel navigateur fonctionne un retour vide NaN zone de texte? Je ne l'ai jamais vu ça, et je ne peux pas reproduire.

La valeur d'une zone de texte est en fait une chaîne. Une zone de texte vide retourne une chaîne vide!

Oh, et pour vérifier si quelque chose est NaN, vous devez utiliser:

if (isNaN(tb.value))
{
   ...
}

Note: Le retour isNaN() fonction true pour tout ce qui ne peut être analysé comme un nombre, à l'exception des chaînes vides. Cela signifie qu'il est un bon contrôle pour l'entrée numérique (beaucoup plus facile que regexes):

if (tb.value != "" && !isNaN(tb.value))
{
   // It's a number
   numValue = parseFloat(tb.value);
}

Autres conseils

Vous pouvez aussi le faire de cette façon:

var number = +input.value;
if (input.value === "" || number != number)
{
    // not a number
}

NaN est égal à rien, pas même lui-même.

si vous ne souhaitez pas utiliser + pour convertir chaîne en nombre, utilisez la parseInt normale, mais rappelez-vous toujours donner une base

var number = parseInt(input.value, 10)

sinon "08" devient 0 parce que Javascript pense qu'il est un nombre octal.

En supposant que vous avez une référence à la zone de saisie de texte:

function getInteger(input) {
  if(!input || !input.value) return "";

  var val = parseInt(input.value, 10);

  if(isNaN(val)) return "";
  else return val;
}

Une chose que vous pouvez faire est un chèque de regex sur la valeur de la zone de texte et assurez-vous qu'il correspond au format d'un nombre accepté, et si elle correspond au format effectuer votre processus, sinon retourner une chaîne vide.

Modifier : Ceci est un exemple de quelque code que j'ai devant moi (peut-être pas la meilleure expression régulière):

var anum=/(^\d+$)/;

if (!anum.test(document.getElementById("<%=txtConceptOrderValue.ClientID %>").value))
{
    alert("Order Value must be a valid integer");
    document.getElementById("<%=txtConceptOrderValue.ClientID %>").focus();
    return false;
}

Edit 2 : Je tiens également à noter que j'utilise ASP.NET qui est la raison pour laquelle je la voie un peu funky de l'accès à la zone de texte. Dans votre cas JavaScript régulière, il peut ne pas être aussi encombrées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top