例如,我怎样才能运行下面me.test?

myvar = 'test'
me.myvar

ASP查找方法“MYVAR”和没有找到它。在PHP中我可以简单地说我$ - > $ MYVAR但ASP的语法不变量和方法加以区分。建议?

与此密切相关,有没有在ASP经典一个method_exists功能?

提前感谢!

编辑:我正在写一个验证类,并想通过管道分隔字符串调用方法的列表。

因此,例如,以验证一个名称字段,我称之为:

validate("required|min_length(3)|max_length(100)|alphanumeric")

我喜欢具有单个线,显示一个给定字段被验证的所有方式的想法。和所述串的每一管道分隔部是这样的方法的名称。

如果你有一个更好的设置建议,我所有的耳朵!

有帮助吗?

解决方案

可以通过使用GetRef功能实现这种在VBScript: -

Function Test(val)
  Test = val & " has been tested"
End Function

Dim myvar : myvar = "Test"
Dim x : Set x = GetRef(myvar)
Response.Write x("Thing")

可否发送“物已经过测试”到客户端。

因此,这里是使用验证要求GetRef: -

validate("Hello World", "min_length(3)|max_length(10)|alphanumeric")


Function required(val)
    required = val <> Empty
End Function


Function min_length(val, params)
    min_length = Len(val) >= CInt(params(0))
End Function


Function max_length(val, params)
    max_length = Len(val) <= CInt(params(0))
End Function


Function alphanumeric(val)
    Dim rgx : Set rgx = New RegExp
    rgx.Pattern = "^[A-Za-z0-9]+$"
    alphanumeric = rgx.Test(val)
End Function


Function validate(val, criterion)

    Dim arrCriterion : arrCriterion = Split(criterion, "|")
    Dim criteria

    validate = True

    For Each criteria in arrCriterion

        Dim paramListPos : paramListPos = InStr(criteria, "(")

        If paramListPos = 0 Then
            validate = GetRef(criteria)(val)
        Else
            Dim paramList
            paramList = Split(Mid(criteria, paramListPos + 1, Len(criteria) - paramListPos - 1), ",")
            criteria = Left(criteria, paramListPos - 1)
            validate = GetRef(criteria)(val, paramList)
        End If
        If Not validate Then Exit For
    Next

End Function

已经提供了这一点,我不得不说的是,如果您熟悉PHP随后的JScript将在服务器上更好的选择。在Javascript中,你可以这样调用一个方法: -

function test(val) { return val + " has been tested"; )
var myvar = "test"
Response.Write(this[myvar]("Thing"))

其他提示

如果你正在谈论的VBScript,它不具有这种功能。 (至少不是我的知识),我可能会尝试这样的:

Select myvar
   case "test":
      test

   case "anotherSub":
      anotherSub

   else
      defaultSub

end select

这已经有一段时间,因为我写的VBScript(感谢上帝),所以我不知道我的语法有多好。

EDIT-的另一种策略

就个人而言,我会做以上,出于安全原因。但是,如果你绝对不喜欢它,那么你可能需要使用您的网页上不同的语言去尝试。我已经在过去使用JavaScript和VBScript中对我的经典ASP页(服务器端),并能够调用其他语言声明的函数从我目前的语言。在此之前特别方便,当我想要做的使用正则表达式的东西,但在VBScript。

您可以尝试像

<script language="vbscript" runat="server">
    MyJavascriptEval myvar
</script>
<script language="javascript" runat="server">
    function MyJavascriptEval( myExpression)
    {
        eval(myExpression);
    }

    /* OR
    function MyJavascriptEval( myExpression)
    {
        var f = new Function(myExpression);
        f();
    }
    */
</script>

我没有在传统的ASP页面来测试这一点,但我认为这是足够接近,它会与小的调整工作。

PHP的能力,动态调用或创建功能是导致贫穷的编程实践黑客。你需要解释一下你要完成(而不是如何)什么,并学习正确的方式代码。

因为你可以做一些事情,并没有作出正确的还是不错的主意。

使用在ASP / VBScript的 “执行” 的语句。

Execute "Response.Write ""hello world"""

ASP不支持以这种方式后期绑定。什么是你想干什么,在更大的意义?解释说,有人可以告诉你如何完成它在ASP。

此外,你可以考虑“客观化”的验证功能。制作类是可能的(虽然不是广泛地使用)中VB脚本。

<%
Class User
' declare private class variable
Private m_userName

' declare the property
Public Property Get UserName
  UserName = m_userName
End Property
Public Property Let UserName (strUserName)
  m_userName = strUserName
End Property

' declare and define the method
Sub DisplayUserName
  Response.Write UserName
End Sub

End Class
%> 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top