Error handling VBScript-验证输入是否为IP,每八位字节3位
我是一名学习VBScript的学生。就在几天前[咧嘴笑],我才开始用BASIC、DOS和机器代码编程,所以基本概念不是外来的,只是有点陌生 警告-这是分级作业的一部分,主要要求的是对代码的指导和理解。 尝试编写一个脚本,用于用户输入IP地址,其中每个八位字节为3位格式(如有必要,则前导零)。这是开始输入Error handling VBScript-验证输入是否为IP,每八位字节3位,error-handling,vbscript,ip-address,custom-error-handling,Error Handling,Vbscript,Ip Address,Custom Error Handling,我是一名学习VBScript的学生。就在几天前[咧嘴笑],我才开始用BASIC、DOS和机器代码编程,所以基本概念不是外来的,只是有点陌生 警告-这是分级作业的一部分,主要要求的是对代码的指导和理解。 尝试编写一个脚本,用于用户输入IP地址,其中每个八位字节为3位格式(如有必要,则前导零)。这是开始输入 ' Get IP address to convert WScript.StdOut.Write("Please Enter your IP address (3 digits per
' Get IP address to convert
WScript.StdOut.Write("Please Enter your IP address (3 digits per octet) -> ")
strIP = WScript.StdIn.ReadLine()
正在尝试进行错误检查并遇到问题。尝试了各种方法,但似乎没有一种方法能够提供所需的输出,如果没有失败,在运行时会出现各种VBScript错误
第1版:
Dim sMatch(15)
if sMatch = strIP Like "###.###.###.###" Then
Wscript.Echo "The strings are equal."
Else
Wscript.Echo "The strings are not equal."
' WScript.Echo sMatch
End If
第2版:
String str = StrComp("strIP", ""\###.\###.\###.\###"",vbTextCompare)
If str < 0 or str > 0 then WScript.StdOut.WriteLine "Improper IP format."
String str=StrComp(“strIP”、“strIP”、“vbtextcare”)
如果str<0或str>0,则WScript.StdOut.WriteLine“IP格式不正确。”
第3版:
iFirstOct = Left(strIP,3)
z1 = strComp(iFirstOct, "###", 1)
WScript.Echo "z1 -> " & z1
WScript.Echo "IP -> " & iFirstOct
If z1 < 1 or z1 > 1 Then
WScript.Echo " Error in input !"
WScript.quit
End If
iFirstOct=左侧(条带,3)
z1=strComp(iFirstOct,“####”,1)
WScript.Echo“z1->”和z1
WScript.Echo“IP->”和iFirstOct
如果z1<1或z1>1,则
WScript.Echo“输入错误!”
WScript.quit
如果结束
我有点喜欢第3版,因为我可以将其作为子例程,但不确定哪一个是可行的选项。如有任何帮助,以确定我在哪里出错,以及如何出错,将不胜感激
警告-这是分级作业的一部分,主要要求的是对代码的指导和理解。
--编辑日期:2011年2月16日--
埃蒂安
这是最后的剧本。我已经运行了不同的错误场景,它似乎按照我需要的方式运行。谢谢你的帮助
' IP_func.vbs
'
' By: Étienne Laneville
' Minor modifications by DragonRider
' From: https://stackoverflow.com/questions/66177237/vbscript-verify-input-is-ip-3-digits-per-octet
'
'
WScript.StdOut.Write("Please Enter your IP address (3 digits per octet) -> ")
strIP = WScript.StdIn.ReadLine()
WScript.Echo vbCrLf & " Input -> " & vbTab & strIP & vbCrlf
' Call error-checking function
CheckIP(strIP)
Function CheckIP(strIP)
Dim arrOctets
Dim iCounter
Dim sOctet
' Check for periods
If InStr(strIP, ".") = 0 Then
CheckIP = False
WScript.Echo " Incorrect number of octets. Please try again."
Exit Function
End If
' Split string on periods
arrOctets = Split(strIP, ".")
' Check that correct number of octets has been received
If UBound(arrOctets) <> 3 Then
CheckIP = False
WScript.Echo " Incorrect number of octets. Please try again."
Exit Function
End If
' Check each octet
For iCounter = 1 To 4
sOctet = arrOctets(iCounter - 1)
' Check if it's numeric
If Not IsNumeric(sOctet) Then
CheckIP = False
WScript.Echo " Improper IP Address. Please try again."
Exit Function
End If
' Check if 3 digits
' Dim three As String
If Not Len(sOctet) = 3 Then
CheckIP = False
WScript.Echo " 3-Digits per octet. Please try again."
Exit Function
End If
' Check for proper values
If CInt(sOctet) > 255 Then
CheckIP = False
WScript.Echo " Octet out of range. Please try again."
Exit Function
End If
If CInt(sOctet) < 0 Then
CheckIP = False
WScript.Echo " Improper IP Address. Please try again."
Exit Function
End If
Next
CheckIP = True
End Function
“IP_func.vbs
'
作者:埃蒂安·兰维尔
“DragonRider的小改动
“发件人:https://stackoverflow.com/questions/66177237/vbscript-verify-input-is-ip-3-digits-per-octet
'
'
Write(“请输入您的IP地址(每八位字节3位)->”)
strIP=WScript.StdIn.ReadLine()
WScript.Echo vbCrLf&“输入->”&vbTab&strIP&vbCrLf
'调用错误检查函数
支票(条)
功能检查IP(条带)
暗区
暗色计数器
暗sOctet
“检查周期
如果仪表(条带“.”=0,则
CheckIP=False
WScript.Echo“八位字节数不正确。请重试。”
退出功能
如果结束
'在句点上拆分字符串
arrOctets=拆分(带“.”)
'检查是否已收到正确数量的八位字节
如果UBound(arrOctets)3,则
CheckIP=False
WScript.Echo“八位字节数不正确。请重试。”
退出功能
如果结束
“检查每个八位组
对于iCounter=1到4
sOctet=arrOctets(iCounter-1)
'检查它是否为数字
如果不是数字(sOctet),则
CheckIP=False
WScript.Echo“IP地址不正确。请重试。”
退出功能
如果结束
'检查是否有3位数字
"暗三如弦"
如果不是Len(sOctet)=3,则
CheckIP=False
WScript.Echo“每八位字节3位。请重试。”
退出功能
如果结束
'检查正确的值
如果CInt(sOctet)>255,则
CheckIP=False
WScript.Echo“八位字节超出范围。请重试。”
退出功能
如果结束
如果CInt(sOctet)<0,则
CheckIP=False
WScript.Echo“IP地址不正确。请重试。”
退出功能
如果结束
下一个
CheckIP=True
端函数
这里有一个简单的函数,可以将事情分解为简单的操作:
Function CheckIP(strIP)
Dim arrOctets
Dim iCounter
Dim sOctet
' Check for periods
If InStr(strIP, ".") = 0 Then
CheckIP = False
Exit Function
End If
' Split string on periods
arrOctets = Split(strIP, ".")
' Check that correct number of octets has been received
If UBound(arrOctets) <> 3 Then
CheckIP = False
Exit Function
End If
' Check each octet
For iCounter = 1 To 4
sOctet = arrOctets(iCounter - 1)
' Check if it's numeric
If Not IsNumeric(sOctet) Then
CheckIP = False
Exit Function
End If
' Check for proper values
If CInt(sOctet) > 255 Then
CheckIP = False
Exit Function
End If
If CInt(sOctet) < 0 Then
CheckIP = False
Exit Function
End If
Next
CheckIP = True
End Function
功能检查IP(条带)
暗区
暗色计数器
暗sOctet
“检查周期
如果仪表(条带“.”=0,则
CheckIP=False
退出功能
如果结束
'在句点上拆分字符串
arrOctets=拆分(带“.”)
'检查是否已收到正确数量的八位字节
如果UBound(arrOctets)3,则
CheckIP=False
退出功能
如果结束
“检查每个八位组
对于iCounter=1到4
sOctet=arrOctets(iCounter-1)
'检查它是否为数字
如果不是数字(sOctet),则
CheckIP=False
退出功能
如果结束
'检查正确的值
如果CInt(sOctet)>255,则
CheckIP=False
退出功能
如果结束
如果CInt(sOctet)<0,则
CheckIP=False
退出功能
如果结束
下一个
CheckIP=True
端函数
您还可以使用正则表达式和以下函数检查IP地址的有效性:
Option Explicit
Dim Title,IP
Title = "Test the validity of an IP address"
IP = InputBox("Please enter an IP Address",Title,"172.16.18.21")
If Is_Valid(IP) = True Then
MsgBox IP & " is a Valid IP Address",64,Title
Else
MsgBox IP & " is Not a Valid IP Address",16,Title
End if
'------------------------------------------------------------------------------------
Function Is_Valid(ip)
Dim RegularExpressionObject
Set RegularExpressionObject = New RegExp
With RegularExpressionObject
.Pattern = "^((25[0-5]|2[0-4]\d|1?\d?\d)\.){3}(25[0-5]|2[0-4]\d|1?\d?\d)$"
.IgnoreCase = False
If .Test(ip)= True then
Is_Valid = True
end if
End With
End Function
'------------------------------------------------------------------------------------
哇!我能读懂这些,非常直截了当。由于我们在课堂上没有涉及到很多这样的命令,我相信我很难把它当作“我的工作”。尽管如此,我还是可以在我已经拥有的基础上再增加一部分。非常感谢您的回复,使用这样的函数,您可以返回一条消息,解释IP地址的确切问题,如“第三个八位字节不能大于255”。我运行此代码添加了我的“Get IP address to convert”部分,没有得到任何信息。尝试将变量的Echo命令放在不同的地方,只有“strIP”给出了任何输出,所有其他变量都是空的。即使尝试在不同位置使用超出范围的数字(+260),仍然没有错误和“剥离””重复输入字符串。如果我遗漏了什么,我不知道是什么,因为代码似乎正常终止,没有错误。你能用你尝试过的代码更新你的问题吗?这是一个只返回
true
或false
的函数,具体取决于IP地址的有效性。它不会改变条带
。解决了我的问题。。。我没有“调用”函数