微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VBScript - 验证输入是 IP,每八位字节 3 位

如何解决VBScript - 验证输入是 IP,每八位字节 3 位

我是一名学习 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."

版本 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

我有点喜欢版本 3,因为我可以对它进行子程序处理,但不确定哪个是可行的选择。任何帮助确定我在哪里出错以及如何出错的帮助将不胜感激。

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

-- 编辑 - 21 年 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

解决方法

这是一个将事情分解为简单操作的简单函数:

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 地址的有效性:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?