質問

たとえば、以下でme.testを実行するにはどうすればよいですか?

myvar = 'test'
me.myvar

ASPはメソッド" myvar"を探します。それが見つかりません。 PHPでは、単に$ me-> $ myvarと言えますが、ASPの構文は変数とメソッドを区別しません。提案?

これに密接に関連して、ASP Classicに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]+
function test(val) { return val + " has been tested"; )
var myvar = "test"
Response.Write(this[myvar]("Thing"))
quot; 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では、次のようなメソッドを呼び出すことができます:-

<*>

他のヒント

VBScriptについて話している場合、そのような機能はありません。 (少なくとも私の知る限りではない)私はこのようにしようと思うかもしれない:

Select myvar
   case "test":
      test

   case "anotherSub":
      anotherSub

   else
      defaultSub

end select

VBScriptを書いてからしばらく経ちました(ありがとう)

編集-別の戦略

個人的には、セキュリティ上の理由から上記を行います。しかし、どうしても気に入らない場合は、ページで異なる言語を使用してみてください。過去に、クラシックASPページ(両方のサーバー側)でJavascriptとVBScriptの両方を使用し、現在の言語から他の言語で宣言された関数を呼び出すことができました。これは、正規表現で何かをしたいときに特に便利でしたが、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