web-dev-qa-db-fra.com

VBScript: vérifier si l'entrée utilisateur est un entier

Dans un script VBScript, je dois m'assurer que l'utilisateur entre un entier.

Voici ce que j'ai maintenant:

WScript.Echo "Enter an integer number : "
Number = WScript.StdIn.ReadLine
If IsNumeric(Number) Then
    ' Here, it still could be an integer or a floating point number
    If CLng(Number) Then
       WScript.Echo "Integer"
    Else
       WScript.Echo "Not an integer"
    End If
End if

Le problème est que CLng () ne teste pas si mon nombre est un entier: le nombre est converti quand même.

Existe-t-il un moyen de vérifier si un nombre est un entier?

MODIFIER :

La réponse suggérée ne fonctionne pas aussi bien pour moi. Voici une nouvelle version de mon code:

WScript.Echo "Enter an integer number : "
Number = WScript.StdIn.ReadLine
If IsNumeric(Number) Then
   ' Here, it still could be an integer or a floating point number
   If Number = CLng(Number) Then
      WScript.Echo "Integer"
   Else
      WScript.Echo "Not an integer"
   End If
End if

et voici la sortie:

U:\>cscript //nologo test.vbs
Enter an integer number :
12
Not an integer

U:\>cscript //nologo test.vbs
Enter an integer number :
3.45
Not an integer
16
Jérôme

Ceci est très similaire à votre code:

WScript.Echo "Enter an integer number : "
Number = WScript.StdIn.ReadLine
If IsNumeric(Number) Then
    ' Here, it still could be an integer or a floating point number
    If CLng(Number) = Number Then
       WScript.Echo "Integer"
    Else
       WScript.Echo "Not an integer"
    End If
End If
13
backslash17

Cela fonctionnera réellement:

WScript.Echo "Enter an integer number : "
Number = WScript.StdIn.ReadLine
If IsNumeric(Number) Then
    ' Here, it still could be an integer or a floating point number
    If CStr(CLng(Number)) = Number Then
       WScript.Echo "Integer"
    Else
       WScript.Echo "Not an integer"
    End If
End If

Auparavant, le problème était que vous compariez une chaîne à un entier qui ne donnerait jamais la valeur true. 

Maintenant, vous prenez une chaîne, vérifiez si elle est numérique, transformez-la en CLng () qui ne renverra que la partie entière du nombre, la transformera en chaîne et comparera finalement avec la chaîne d'origine.

Si vous entrez ... "asdasD" (ou toute autre chose non numérique), le test "isNumeric" n'est pas passé. 

Si vous entrez "10.5" (sous forme de chaîne) lors de la conversion en CLng (), vous obtenez 10, puis la conversion en "10" est comparée à "10.5". Comme les chaînes ne correspondent pas, cela signifie que ce n'est pas un entier.

Si vous entrez "10" converti en CLng (), c'est 10, en chaîne, c'est "10" qui renvoie un vrai en le comparant à "10", ce qui signifie qu'il s'agit d'un entier.

Quelques années trop tard, je le sais, mais je me suis penchée sur la question moi-même tout à l'heure et cela m'a rendu perplexe. J'espère que cela aidera les autres à se poser des questions comme moi.

14
cogumel0

Si vous faites quelque chose comme ça, ça devrait marcher:

si Number = CInt (Number) Alors

3
kemiller2002

la réponse de Cogumel ci-dessus l'obtient presque, mais a échoué pour moi de façon étrange. J'ai découvert que cela retournerait vrai pour "5" (entre guillemets), mais pas 5 (sans guillemets). Lors de la comparaison finale, vous devez également convertir l'entrée d'origine en chaîne afin que tout fonctionne de manière fiable. Ici, il est enveloppé dans une fonction soignée:

public function is_integer( input )
    is_integer = false
    If IsNumeric(input) Then
        If CStr(CLng(input)) = CStr(input) Then is_integer = true
    End If
end function

J'ai également testé cela avec des entiers négatifs (vrais) nuls (vrais), entre guillemets et entre guillemets.

2
Stephen R

J'ai trouvé ce programme simple pour valider la valeur numérique de http://rindovincent.blogspot.com/p/vbscript-programs.html et avec permission, je le colle. J'espère que cela sera utile pour les débutants comme moi

<HTML>
<HEAD><TITLE>Simple Validation</TITLE>
<SCRIPT LANGUAGE="VBScript"> 
<!--
Sub Submit_OnClick
  Dim TheForm
  Set TheForm = Document.ValidForm
  If IsNumeric(TheForm.Text1.Value) Then
    If TheForm.Text1.Value < 18 Or TheForm.Text1.Value > 40 Then
      MsgBox "Age must be above 18"
    Else
      MsgBox "Thank You"
    End If
  Else
    MsgBox "Please enter a numeric value"
  End If
End Sub
-->
</SCRIPT>
</HEAD>
<BODY>
<H3>Simple Validation</H3><HR>
<FORM NAME="ValidForm">
Enter your age: 
<INPUT NAME="Text1" TYPE="TEXT" SIZE="2">
<INPUT NAME="Submit" TYPE="BUTTON" VALUE="Submit">
</FORM>
</BODY>
</HTML> 
0
Gautham