2017-11-24 3 views
0

Ich machte ein ASP ASP auf dem ein Benutzer eine Zahl, ein oder mehrere Zeichen und ein Wort eingeben kann. Dann kann er den Knopf drücken und er ersetzt in den gegebenen Zeichen im Wort mit den angegebenen Zahlen. Meine Frage ist, wie kann ich das Skript ersetzen einzelne Zeichen, wenn der Benutzer mehr eingegeben? d. H. Eingabe ist "ab" das Wort ist "abby", und die Nummer ist "1", mein aktuelles Programm macht "1by", aber ich möchte es "111y" machen, wie erkenne ich das?Ersetzen einzelner Zeichen basierend auf Benutzereingabe mit HTML und 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> 

Antwort

1

Die Replace Funktion ersetzt den Suchbegriff (l_letter) im gegebenen Ausdruck (hier l_wort) mit dem Ersatz-String (l_zahl). Um alle Zeichen in l_letter durch l_zahl zu ersetzen, müssen Sie den Austausch in einer Schleife für jedes Zeichen in l_letter durchführen. Die Funktion Split ermöglicht es Ihnen jedoch nicht, eine Zeichenfolge in ein Array seiner Zeichen aufzuteilen. Es teilt eine Zeichenfolge an einem gegebenen Trennzeichen (standardmäßig Leerzeichen). Wenn Sie Split für eine Variable ohne Leerzeichen aufrufen, erhalten Sie ein Array mit nur einem einzigen Feld, das die ursprüngliche Zeichenfolge enthält. VBScript erweitert auch keine Variablen in Zeichenfolgen. Wenn Sie also variable in doppelte Anführungszeichen setzen, erhalten Sie die Literalzeichenfolge "variable", keine Zeichenfolge mit dem Wert der Variablen.

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

Für aus einem String einzelnen Zeichen zu extrahieren verwenden, um die Mid Funktion:

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

Ein besserer Ansatz als mehrere Ersetzungen tun i n eine Schleife wäre unter Verwendung eines regular expression Ersatz:

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

die Zeicheneingabe als eine Liste Treat/Sammlung von Briefen zu ersetzen:

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 

output:

cscript 47469843.vbs 
ab 1 abby 
ab 1 111y 
Verwandte Themen