确定经典应用程序的设备 asp

Determine device for application in classic asp

我想确定我的应用程序使用了哪个设备。我想看看是不是

尽管只有几个有效的选项(我们对所有内容都有固定的设备),但我想让它尽可能动态化。

我在这里发现了一个类似的问题:Detect mobile user agent from classic ASP and redirect on session start

我对此很熟练并编写了以下函数,以检查当前访问我网站的设备。但是,我认为它有点混乱,因为它是如此 "static" 当涉及到正则表达式时

这是我想出的:

public function checkUserAgent()
    Set Regex = New RegExp
    With Regex
        .Pattern = "(Mobile\sSafari|Linux;\sAndroid)"
        .IgnoreCase = True
        .Global = True
    End With
    Match = Regex.test(Request.ServerVariables("HTTP_USER_AGENT"))
    If Match then
        user_agent = "Phone"
    End If

    Set Regex = New RegExp
    With Regex
        .Pattern = "(windows\sNT)"
        .IgnoreCase = True
        .Global = True
    End With
    Match = Regex.test(Request.ServerVariables("HTTP_USER_AGENT"))
    If Match then
        user_agent = "PC"
    End If

    Set Regex = New RegExp
    With Regex
        .Pattern = "(ipad)"
        .IgnoreCase = True
        .Global = True
    End With
    Match = Regex.test(Request.ServerVariables("HTTP_USER_AGENT"))
    If Match then
        user_agent = "Tablet"
    End If

end function

我现在的问题:RegExp 的代码似乎是多余的。我将如何改进它?我怎么可能使它更紧凑,结果相同?我需要获取用户代理类型,以便我可以更新我的数据库并继续计数,使用了多少设备/类型。

我会更像这样构建它。

dim device
device = checkUserAgent
response.write device

function checkUserAgent()

    dim user_agent
    user_agent = Request.ServerVariables("HTTP_USER_AGENT")

    if reTest(user_agent, "(Mobile\sSafari|Linux;\sAndroid)") then
        checkUserAgent = "Phone"
    elseif reTest(user_agent, "(windows\sNT)") then
        checkUserAgent = "PC"
    elseif reTest(user_agent, "(ipad)") then
        checkUserAgent = "Tablet"
    end if

end function

function reTest(subject, pattern)

    dim re, returnVal
    returnVal = false

    Set re = New RegExp
    With re
        .Pattern = pattern
        .IgnoreCase = True
        .Global = True
    End With
    If re.test(subject) then
        returnVal = true
    End If
    Set re = Nothing

    reTest = returnVal 

end function

或者,如果您对设备类型更加细化并最终拥有更多设备类型,使用字典可能会更容易管理。在那种情况下,checkUserAgent 可能看起来更像:

function checkUserAgent()

    dim user_agent, d

    user_agent = Request.ServerVariables("HTTP_USER_AGENT")
    set d = Server.CreateObject("Scripting.Dictionary")

    d.add "Phone",  "(Mobile\sSafari|Linux;\sAndroid)"
    d.add "PC",     "(windows\sNT)"
    d.add "Tablet", "(ipad)"

    for each k in d.keys
        if (reTest(user_agent, d.item(k))) then
            checkUserAgent = k
            exit for
        end if
    next

end function