通过VBS脚本检查URL的语法
有没有办法通过visual basic检查URL的语法?下面是我的代码。我需要一种方法来检查语法并确保它是正确的(即有http、.com或.net或.edu)。我需要检查格式,以确保url的是典型的标准url格式。这能做到吗通过VBS脚本检查URL的语法,url,vbscript,syntax,Url,Vbscript,Syntax,有没有办法通过visual basic检查URL的语法?下面是我的代码。我需要一种方法来检查语法并确保它是正确的(即有http、.com或.net或.edu)。我需要检查格式,以确保url的是典型的标准url格式。这能做到吗 Public PageSource As String Public httpRequest As Object Function GetURLStatus(ByVal URL As String, Optional AllowRedirects As Boolean)
Public PageSource As String
Public httpRequest As Object
Function GetURLStatus(ByVal URL As String, Optional AllowRedirects As Boolean)
Const WinHttpRequestOption_EnableRedirects = 6
If httpRequest Is Nothing Then
On Error Resume Next
Set httpRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
If httpRequest Is Nothing Then
Set httpRequest = CreateObject("WinHttp.WinHttpRequest.5")
End If
Err.Clear
On Error GoTo 0
End If
httpRequest.Option(WinHttpRequestOption_EnableRedirects) = AllowRedirects
If InStr(1, URL, "://") = 0 Then
URL = "http://" & URL
End If
On Error Resume Next
httpRequest.Open "GET", URL, False
If Err.Number <> 0 Then
' Handle connection errors
GetURLStatus = Err.Description
Err.Clear
Exit Function
End If
On Error GoTo 0
On Error Resume Next
httpRequest.Send
httpRequest.WaitForResponse
If Err.Number <> 0 Then
PageSource = "Error"
GetURLStatus = Err.Description
Err.Clear
Else
GetURLStatus = httpRequest.Status & " - " & httpRequest.StatusText
PageSource = httpRequest.ResponseText
End If
On Error GoTo 0
End Function
publicpagesource作为字符串
作为对象的公共httpRequest
函数GetURLStatus(ByVal URL作为字符串,可选AllowerStatus作为布尔值)
Const WinHttpRequestOption_EnableRedirects=6
如果httpRequest什么都不是,那么
出错时继续下一步
设置httpRequest=CreateObject(“WinHttp.WinHttpRequest.5.1”)
如果httpRequest什么都不是,那么
设置httpRequest=CreateObject(“WinHttp.WinHttpRequest.5”)
如果结束
呃,明白了
错误转到0
如果结束
httpRequest.Option(WinHttpRequestOption_EnableRedirects)=AllowRedirects
如果InStr(1,URL,“:/”)=0,则
URL=“http://”&URL
如果结束
出错时继续下一步
httpRequest.Open“GET”,URL,False
如果错误号为0,则
'处理连接错误
GetURLStatus=Err.Description
呃,明白了
退出功能
如果结束
错误转到0
出错时继续下一步
httpRequest.Send
httpRequest.WaitForResponse
如果错误号为0,则
PageSource=“错误”
GetURLStatus=Err.Description
呃,明白了
其他的
GetURLStatus=httpRequest.Status&“-”&httpRequest.StatusText
PageSource=httpRequest.ResponseText
如果结束
错误转到0
端函数
想到三种方法:正则表达式、使用XMLHTTP和使用第三方库
如果您可以使用其他语言,您可以编写自己的ActiveX控件。例如,VB.Net具有内置类,使验证URL非常容易。我假设您正在寻找一个只使用VB脚本的答案,所以我甚至不会尝试介绍这个答案
首先,您可能想弄清楚您想要覆盖哪些类型的URL。根据,所有这些都是有效的URL:
ftp://ftp.is.co.za/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt
ldap://[2001:db8::7]/c=GB?objectClass?one
mailto:John.Doe@example.com
news:comp.infosystems.www.servers.unix
tel:+1-816-555-1212
telnet://192.0.2.16:80/
urn:oasis:names:specification:docbook:dtd:xml:4.1.2
范围越窄,解决方案就越不复杂。如果您需要涵盖所有可能的类型,我将研究第三方库。谷歌很快就找到了。这不是认可。我从来没有使用过这个图书馆,而且我确信还有很多其他很棒的图书馆
您可以尝试正则表达式方法,但它充满了可能会让您发疯的边缘情况。同样,如果你能缩小你的范围,你会更成功。下面详细介绍了如何使用正则表达式验证URL。这也是我无耻地偷取下面示例中正则表达式的地方:)
我的VB有点生疏,但这里有一个正则表达式方法的示例
Wscript.Echo IsUrlValidRegex("http://www.stackoverflow.com")
Wscript.Echo IsUrlValidRegex("this is not a url")
Wscript.Echo IsUrlValidRegex("mailto:John.Doe@example.com")
Function IsUrlValidRegex(url)
Set oRegex = new regexp
oRegex.Pattern = "((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)"
oRegex.IgnoreCase = true
if oRegex.Test(url) then
IsUrlValidRegex = true
else
IsUrlValidRegex = false
end if
End Function
另一种可能的方法是尝试点击URL以确定它是否有效。这听起来不错,但它只适用于HTTP/S,在运行实时服务器时效果最好。我不确定我是否会推荐这种方法,但下面是它的工作原理
Wscript.Echo IsUrlValidHttp("http://www.stackoverflow.com")
Wscript.Echo IsUrlValidHttp("http://not.arealwebsite.com/")
Wscript.Echo IsUrlValidHttp("this is not a url")
Wscript.Echo IsUrlValidHttp("mailto:John.Doe@example.com")
Function IsUrlValidHttp(sUrl)
On Error Resume Next
Dim oXMLHTTP
Set oXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
oXMLHTTP.Open "GET", sUrl, False
oXMLHTTP.Send
If Err = 0 Then
' valid HTTP URL, valid server
'If oXMLHTTP.Status = 200 Then
IsUrlValidHttp = true
'End If
ElseIf Err = -2147012889 Then
' valid HTTP URL, invalid server
IsUrlValidHttp = true
ElseIf Err = -2147467259 Then
' not a valid http URL
IsUrlValidHttp = false
End If
End Function
如果您对可能出现的边缘情况满意,我会尝试正则表达式方法。否则,我会看一个第三方库。< /p>也许检查一下是否设置了一个通用的正则表达式?@ MikeChristensen,它是否暴露在COM上,好像OP是在VBScript解决方案之后?我想你可能误会了。我觉得那代码不像VBScript。您正在寻找VBScript、VBA、VB6或VB.NET吗?