Error handling VBScript-验证输入是否为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

我是一名学习VBScript的学生。就在几天前[咧嘴笑],我才开始用BASIC、DOS和机器代码编程,所以基本概念不是外来的,只是有点陌生

警告-这是分级作业的一部分,主要要求的是对代码的指导和理解。

尝试编写一个脚本,用于用户输入IP地址,其中每个八位字节为3位格式(如有必要,则前导零)。这是开始输入

' 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地址的有效性。它不会改变
条带
。解决了我的问题。。。我没有“调用”函数