2017-11-24 8 views
0

ユーザーは数字、1つ以上の文字、および単語を入力できるans ASPを作成しました。次に彼はボタンを押すことができ、与えられた数字で単語の中の与えられた文字を置き換える。 私の質問は、ユーザーがもっと入力したときにスクリプトが単一の文字を置き換えるようにする方法です。 つまり、Entryは「ab」、単語は「abby」、数字は「1」、現在のプログラムは「1by」ですが、「111y」にしたいと思います。HTMLとVBscriptを使用したユーザー入力に基づく単一のキャラクターの置換

<html> 
    <head> 
    <meta charset = "utf-8"> 
     <title>Replace 
     </title> 
    </head> 
    <body> 
<% 
response.flush 
l_zahl = request.querystring("f_zahl") 
l_wort = request.querystring("f_wort") 
Dim letterarray, l_letter 
l_letter = request.querystring("f_letter") 
letterarry = Split("l_letter") 

If IsNumeric(request.querystring("f_zahl")) And Not IsNumeric(request.querystring("f_letter")) And Not IsNumeric(request.querystring("f_wort")) Then 
    Dim zahlarray, l_zahl 
    l_zahl = request.querystring("f_zahl") 
    zahlarry = Split("l_zahl") 
    Dim wortarray, l_wort 
    l_wort = request.querystring("f_wort") 
    wortarry = Split("l_wort") 
    l_replace = (Replace(l_wort, l_letter, l_zahl, 1, -1, 1)) 
ElseIf Not IsNumeric(request.querystring("f_zahl")) Then 
    l_replace = "Keine Zahl" 
ElseIf IsNumeric(request.querystring("f_letter")) Then 
    l_replace = "Kein Buchstabe" 
ElseIf IsNumeric(request.querystring("f_wort")) Then 
    l_replace = "Kein leetspeak" 
End If 
%> 
    <form action = "Replacer.asp" method = "get"> 
     <table width = "800" heigth = "400" border="1" cellspacing="0" cellpadding="1" align = "center" font face="tahoma, arial, helvetica, sans-serif" > 
     <tr> 
      <td align = "left" width = "100"> 
      Bitte Zahl eingeben 
      </td> 
      <td align = "left" width = "100"> 
      <input type = "text" name = "f_zahl" value = "<%=l_zahl%>"> 
      </td> 
      <td align = "left" width = "100"> 
      Bitte Buchstabe eingeben 
      </td> 
      <td> 
      <input type = "text" name = "f_letter" value = "<%=l_letter%>"> 
      </td> 
      <td> 
      Bitte ein Wort eingeben 
      </td> 
      <td align = "left" width = "100"> 
      <input type = "text" name = "f_wort" value = "<%=l_wort%>"> 
      </td> 
      <td width = "*"> 
      <input type = "submit" value = "Ersetzen" \> 
      </td> 
     </tr> 
     <tr> 
      <td colspan = "2"> 
      &nbsp; 
      </td> 
      <td > 
      Ver&auml;ndertes Wort 
      </td> 
      <td colspan = "4"> 
      <%=l_replace%> 
      </td>  
     </tr> 
     </table> 
    </body> 
</html> 

答えて

1

Replace機能は、置換文字列(l_zahl)で与えられた式に検索文字列を(l_letter)(ここではl_wort)に置き換えられます。 l_letterのすべての文字をl_zahlに置き換えるには、各文字のループ内の置換をl_letterにする必要があります。ただし、Split関数では、文字列を文字の配列に分割することはできません。指定された区切り文字(デフォルトではスペース)で文字列を分割します。空白のない変数にSplitを呼び出すと、元の文字列を含むフィールドが1つだけの配列になります。また、VBScriptは文字列の変数を展開しないので、二重引用符でvariableを入力すると、変数の値を含む文字列ではなく、リテラル文字列が得られます。

var = "ab" : Split("var")[ "var" ]
var = "ab" : Split(var)[ "ab" ]
var = "a b" : Split(var)[ "a", "b" ]

文字列から個々の文字を抽出するためのMid機能を使用します。複数の置換を行うよりも

​​

より良いアプローチをI nはregular expression交換を使用することになりループ:

Set re = New RegExp 
re.Pattern = "[" & l_letter & "]" 
l_replace = re.Replace(l_wort, l_zahl) 
1

は交換する文字のリスト/コレクションとして文字入力を扱う:

Option Explicit 

Dim f : f = "ab" 
Dim t : t = "1" 
Dim w : w = "abby" 

WScript.Echo f, t, w 
Dim i 
For i = 1 To Len(f) 
    w = Replace(w, Mid(f, i, 1), t) 
Next 
WScript.Echo f, t, w 

出力:

cscript 47469843.vbs 
ab 1 abby 
ab 1 111y 
関連する問題