使用HTML和VBscript替换基于用户输入的单个字符

时间:2017-11-24 09:12:39

标签: replace vbscript asp-classic

我制作了一个用户可以输入数字,一个或多个字符和一个单词的ASP。然后他可以按下按钮,它会用给定的数字替换单词中给定的字符。 我的问题是,当用户输入更多内容时,如何让脚本替换单个字符? 即进入" ab"这个词是" abby",而且数字是" 1",我现在的节目制作" 1by",但我想要#34; 111y&# 34;,我怎么意识到这一点?

<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>

2 个答案:

答案 0 :(得分:1)

Replace函数用替换字符串(l_letter)替换给定表达式(此处为l_wort)中的搜索字符串(l_zahl)。要用l_letter替换l_zahl中的所有字符,您需要在l_letter中的每个字符的循环中进行替换。但是,Split函数不允许您将字符串拆分为其字符数组。它将字符串拆分为给定的分隔符(默认为空格)。在没有空格的变量上调用Split将为您提供一个只包含原始字符串的单个字段的数组。此外,VBScript不会在字符串中扩展变量,因此如果您将variable放在双引号中,您将获得文字字符串"variable",而不是具有变量值的字符串。

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

要从字符串中提取单个字符,请使用Mid函数:

l_replace = l_wort
For i=1 To Len(l_letter)
    l_replace = Replace(l_replace, Mid(l_letter, i, 1), l_zahl)
Next

比在循环中进行多次替换更好的方法是使用regular expression替换:

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

答案 1 :(得分: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