replace() - Problem, weil mit *Sternchen*

Jerinca

Erfahrenes Mitglied
Hallo Leute!

Wieder mal ein replace-Problem, aber ich konnte nichts passendes im Forum finden :(

Folgendes: Ich habe in einem Textfeld mehrere mit *Sternchen* abgetrennte Zahlen stehen, sieht z.B. so aus:

*1*, *3*, *10*

Dieser Textfeldinhalt soll in einer JavaScript-Funktion weiterverarbeitet werden, und zwar sollen zunächst alle *Sternchen* entfernt werden; der Rest wird dann an den Kommas getrennt und in ein Array geschrieben (aber darum soll es jetzt hier nicht gehen) :offtopic:

Mit der replace-Funktion ergibt sich jetzt folgendes Problem (bin ganz stolz, daß ich nach Langem selbst darauf gekommen bin, wo das Problem überhaupt liegt :p ):

Wenn ich schreibe:
Code:
irgend_ein_String.replace(/*/g, "");

dann denkt der Browser (oder der Rechner oder was weiß ich, wer), daß ich mit /* ein Kommentar angefangen habe, weil in JavaScript kann man die Kommentare ja so machen: // oder eben so: /* ... */

Also ist das Verhalten (eben eine Fehlermeldung) ja schon irgendwie logisch... Nur wie bekomme ich mit replace jetzt wirklich die *Sternchen* ersetzt Hab's mal versucht mit Hochkommas und mit Anführungsstrichen:

Code:
irgend_ein_String.replace(/'*'/g, "");  
irgend_ein_String.replace(/"*"/g, "");

aber beides wollte nicht klappen... d.h., es wurde eigentlich gar nix ersetzt :mad:

Die Funktion stimmt so aber schon von der Denkweise, denn wenn ich z.B. schreibe:

Code:
irgend_ein_String.replace(/1/g, "");

dann steht auch wirklich statt z.B.: *1*, *10* => **, *0*

Wie mach' ich dem denn jetzt nur klar, daß die *Sternchen* nix mit Kommentaren zu tun haben, sondern wirklich das sind, was ich ersetzt haben will :suspekt:

Bitte, bitte helft mir dabei :rolleyes:
 
Hallo Sven!

Vielen dank für Deine schnelle Antwort!

Also, ich hab' echt viel durchprobiert, aber einen \ vor das * zu setzen (ohne danach nochmal einen zu setzen), das ist mir nicht eingefallen!

Es klappt auch vorerst ganz gut. Ich habe eine Meldung eingebaut, die mir den Inhalt des Textfelds, das Ergebnis nach dem replace und auch das Array anzeigt, das danach gebildet wird.

Das alles sieht super aus!

Also, der kursive Teil funktioniert (schon überprüft), aber beim folgenden Kommando kriege ich dann eine Fehlermeldung:
Code:
var intRecIDs = (String(Request.Form("hidRecIDs"))).replace(/\*/g, "");
var arrRecIDs = intRecIDs.split(", ");
function numsort(a,b) { return a-b; }
arrRecIDs.sort(numsort);
var erster = arrRecIDs[0];
var letzter = arrRecIDs[arrRecIDs.length-1];
for (i = 0; i <= letzter; i++) { 				
	var strText = String(Request.Form("txtText" + arrRecIDs[i])).replace("'", "''");
	var intNum  = String(Request.Form("txtNum" + arrRecIDs[i])).replace("'", "''");
	var commUpdate = Server.CreateObject('ADODB.Command');
	commUpdate.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("TestDB.mdb") + ";Persist Security Info=False";
	commUpdate.CommandText = "UPDATE TestTable  SET RecText = '" + strText + "', RecNum = '" + intNum + "' WHERE RecID = '" + arrRecIDs[i] + "'";
	commUpdate.CommandType = 1;
	commUpdate.CommandTimeout = 0;
	commUpdate.Prepared = true;
	commUpdate.Execute();	 
	commUpdate.ActiveConnection.Close();
	}
Fehlermeldung: 
Microsoft JET Database Engine (0x80040E07)
Datentypen in Kriterienausdruck unverträglich.
/xyz.asp, line 30 (welches, die fette Zeile ist)

Hast Du da vielleicht noch ein Ideechen? Die Fehlermeldung ist mir nämlich neu... Sie kommt erst, seitdem ich den Backslash für das Sternchen gemacht habe :(

Oder gibt es noch eine andere Möglichkeit als den Backslash?

Danke schonmal für Deine/Eure Mühe!
 
Mmmh...mit ASP kenn ich mich überhaupt nicht aus:(

So mal als Laie geschaut, würde ich vielleicht tippen, der Fehler könnte hier liegen:
Code:
commUpdate.CommandText = "UPDATE TestTable  SET RecText = '" + strText + "', RecNum = '" + intNum + "' WHERE RecID = '" + arrRecIDs[i] + "'";

Vielleicht hilft da, den rot markierten Teil durch
Code:
String(arrRecIDs[i])

zu ersetzen... was Anderes sehe ich nicht, wo 2 verschieden Datentypen kollidieren könnten.
Das das erst seit dem Backslash vor dem Asterisk auftritt, kann gut sein... da der Arrayinhalt mit den Sternchen eindeutig ein String war... ohne die Sternchen wird es vielleicht als Integer interpretiert.

Es dürft aber wahrscheinlich besser sein, wenn du da mal im ASP-Forum nachfragst.
 
Hallo Sven!

Auch bei diesem Problem bin ich zu einer Lösung gekommen (was für ein produktiver Morgen -> was so ein Wochenende doch ausmachen kann ;) )

Ich weiß zwar nicht warum, aber es lag an 4 Hochkommas, die ich einfach nur weglassen muß (ich habe sie unterstrichen, falls es jemanden interessiert). Komischerweise müssen die Hochkommas sehr wohl um die Variable "strText" stehen...
Code:
"UPDATE TestTable  SET RecText = '" + strText + "', 
RecNum = '" + intNum + "' WHERE RecID = '" + arrRecIDs[i] + "'";
Naja, egal warum, es funktioniert jedenfalls, wenn man die unterstrichenen Hochkommas weg lässt...

Grüßle, Jerinca
 

Neue Beiträge

Zurück