2009-10-07 113 views
15

在VBScript中,我需要確保用戶輸入一個整數。VBScript:檢查用戶輸入是否爲整數

這是我現在有:

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 

的問題是,CLng函數()不測試,如果我的電話號碼是一個整數:數反正轉換。

有沒有辦法檢查一個數字是否是一個整數?

編輯:

建議的回答沒有工作對我來說也是如此。這裏是我的代碼的新版本:

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 

,這裏是輸出:

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 

回答

11

這是非常相似的代碼:

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 
+0

IsNumeric有問題。輸入「12,6,14」和IsNumeric返回true,並在CLng語句中拋出異常。 – LarryBud 2016-01-16 22:58:13

+1

'CLng(Number)= Number'將不起作用,因爲操作數具有不同的類型,因此檢查將失敗,請參閱@ cogumel0的回答。 – ViRuSTriNiTy 2016-08-31 16:35:50

3

如果你做這樣的事情,它應該工作:

如果數= CINT(數)然後

+0

我更喜歡使用cLong,因爲cInt不能支持32位整數! – backslash17 2009-10-07 15:36:14

+0

你是對的CLong也會工作。我只是創建一個快速的例子。 – kemiller2002 2009-10-07 16:13:10

-4

另一種方式,

if number > 0 then 
... 
end if 
+0

帶小數的數字怎麼樣?雙數不是整數,但可以大於0. – backslash17 2009-10-07 15:27:50

+0

數字(包括整數)也可以是負數。 – Helen 2009-10-07 16:20:28

0

我發現這個簡單的程序從http://rindovincent.blogspot.com/p/vbscript-programs.html驗證數值和經許可後我正在粘貼相同。我希望這將有助於初學者和我一樣

<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> 
13

這將實際工作:

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 

在此之前,問題是,你是VS的整數永遠不會計算爲true比較字符串。

現在,你需要一個字符串,檢查它是否是數字,將其轉換爲CLng(),它將只返回數字的整數部分,將其轉換回字符串並最終與原始字符串進行比較。

如果輸入...「asdasD」(或任何其他非數字的東西),它不會通過「isNumeric」檢查。

如果在轉換爲CLng()時輸入「10.5」(作爲字符串),那麼在轉換爲「10」並與「10.5」進行比較時會得到10。由於字符串不匹配,它說它不是一個整數。

如果輸入「10」轉換爲CLng(),則返回10,返回字符串「10」,將其與「10」匹配時返回true,意味着它是整數。

幾年太遲了我知道,但我剛纔正在調查這件事,並對此感到困惑。希望它能幫助其他人像我一樣對周圍產生懷疑。

+0

你的答案和反斜槓17之間的區別是這一行:'如果CStr(CLng(Number))= Number Then'。 CStr的顯式轉換真的需要嗎?我有感覺VBS正在爲我們做隱式轉換! – 2012-01-11 10:58:44

+1

是的,需要顯式轉換。請注意這一點:「以前,問題在於你正在比較一個字符串與一個永遠不會評估爲真的整數。」 cogumel0,謝謝你解決這個問題! – 2012-03-26 11:44:04

+0

這是此頁面上唯一適用於我的示例(接受的答案沒有)。 CStr()轉換似乎很關鍵。 – gbmhunter 2014-11-12 04:33:08

1

cogumel上面的答案几乎可以得到它,但以奇怪的方式失敗了。我發現它將返回「5」(用引號括起),但不是5(不含引號)。當進行最後的比較時,您還需要將原始輸入轉換爲字符串,以使其全部可靠工作。這被包裹在一個整潔的功能:

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 

我也以零(真),負整數(真),在國內外享有引號的測試這一點。