
Imrul
Wenn ich in Javascript einen Backslash in einige Variablen setze, wie:
var ttt = "aa ///\\\";
var ttt = "aa ///\";
Javascript zeigt einen Fehler.
Wenn ich versuche, den Benutzer bei der Eingabe dieses Zeichens einzuschränken, erhalte ich auch eine Fehlermeldung:
(("aaa ///\\\").indexOf('"') != -1)
Das Einschränken von Backslashes bei Benutzereingaben ist keine gute Strategie, da Sie dem Benutzer eine lästige Nachricht anzeigen müssen.
Warum erhalte ich eine Fehlermeldung mit Backslash?

Daniel Vandersluis
Der Backslash (\
) ist ein Escape-Zeichen in Javascript (zusammen mit vielen anderen C-ähnlichen Sprachen). Das bedeutet, dass Javascript, wenn es auf einen Backslash stößt, versucht, das folgende Zeichen zu maskieren. Zum Beispiel, \n
ist ein Zeilenumbruchzeichen (anstelle eines umgekehrten Schrägstrichs gefolgt von dem Buchstaben n).
Um einen wörtlichen Backslash auszugeben, müssen Sie entkommen es. Das bedeutet \\
gibt einen einzelnen Backslash aus (and \\\\
gibt zwei aus usw.). Der Grund "aa ///\"
funktioniert nicht, weil der Backslash dem entgeht "
(was ein wörtliches Anführungszeichen ausgibt), und daher wird Ihre Zeichenfolge nicht ordnungsgemäß beendet. Ähnlich, "aa ///\\\"
funktioniert nicht, weil der letzte Backslash wieder dem Anführungszeichen entgeht.
Denken Sie daran, dass Sie für jeden Backslash, den Sie ausgeben möchten, Javascript angeben müssen zwei.

Roy Scharon
Sie können Folgendes versuchen, was mehr oder weniger die Standardmethode ist, um Benutzereingaben zu umgehen:
function stringEscape(s) {
return s ? s.replace(/\\/g,'\\\\').replace(/\n/g,'\\n').replace(/\t/g,'\\t').replace(/\v/g,'\\v').replace(/'/g,"\\'").replace(/"/g,'\\"').replace(/[\x00-\x1F\x80-\x9F]/g,hex) : s;
function hex(c) { var v = '0'+c.charCodeAt(0).toString(16); return '\\x'+v.substr(v.length-2); }
}
Dies ersetzt alle Backslashes durch einen Backslash mit Escapezeichen und fährt dann damit fort, andere nicht druckbare Zeichen in ihre Escape-Form zu maskieren. Außerdem werden einfache und doppelte Anführungszeichen maskiert, sodass Sie die Ausgabe sogar in eval als String-Konstruktor verwenden können (was an sich schon eine schlechte Idee ist, wenn man bedenkt, dass Sie Benutzereingaben verwenden). Aber in jedem Fall sollte es die gewünschte Arbeit leisten.

besser leben
Sie müssen jedem entkommen \
zu sein \\
:
var ttt = "aa ///\\\\\\";
Aktualisiert: Ich denke, diese Frage bezieht sich überhaupt nicht auf das Escape-Zeichen in der Zeichenfolge. Der Fragesteller scheint das Problem nicht richtig zu erklären.
weil Sie dem Benutzer eine Nachricht anzeigen mussten, dass der Benutzer keinen Namen mit (\) Zeichen angeben kann.
Ich denke, das Szenario ist wie folgt:
var user_input_name = document.getElementById('the_name').value;
Dann will der Fragesteller prüfen, ob user_input_name
enthält irgendwelche [\
]. Wenn dies der Fall ist, warnen Sie den Benutzer.
Wenn der Benutzer eintritt [aa ///\
] im HTML-Eingabefeld, dann wenn Sie alert(user_input_name)
du wirst sehen [aaa ///\
]. Sie brauchen nicht zu entkommen, dh zu ersetzen [\
] zu sein [\\
] im JavaScript-Code. Wenn Sie maskieren, liegt das daran, dass Sie versuchen, eine Zeichenfolge zu erstellen, die Sonderzeichen enthält in JavaScript-Quellcode. Wenn Sie es nicht tun, wird es nicht korrekt geparst. Da Sie bereits einen String erhalten, müssen Sie ihn nicht an eine Escape-Funktion übergeben. Wenn Sie dies tun, generieren Sie vermutlich einen weiteren JavaScript-Code aus einem JavaScript-Code, aber das ist hier nicht der Fall.
Ich vermute, Asker möchte die Eingabe simulieren, damit wir das Problem verstehen können. Leider versteht Asker JavaScript nicht gut. Daher wird uns ein Syntaxfehlercode geliefert:
var ttt = "aa ///\";
Daher nehmen wir an, dass der Fragesteller Probleme mit dem Entkommen hat.
Wenn Sie simulieren möchten, muss Ihr Code an erster Stelle gültig sein.
var ttt = "aa ///\\"; // <- This is correct
// var ttt = "aa ///\"; // <- This is not.
alert(ttt); // You will see [aa ///\] in dialog, which is what you expect, right?
Jetzt müssen Sie nur noch tun
var user_input_name = document.getElementById('the_name').value;
if (user_input_name.indexOf("\\") >= 0) { // There is a [\] in the string
alert("\\ is not allowed to be used!"); // User reads [\ is not allowed to be used]
do_something_else();
}
Bearbeiten: Ich benutzte []
um Text zu zitieren, der angezeigt werden soll, so wäre es weniger verwirrend als mit ""
.
Der Backslash \
ist für die Verwendung als Escape-Zeichen in Javascript reserviert.
Um einen umgekehrten Schrägstrich wörtlich zu verwenden, müssen Sie zwei umgekehrte Schrägstriche verwenden
\\
Wenn Sie Sonderzeichen im Javascript-Variablenwert verwenden möchten, Escape-Zeichen (\
) ist nötig.
Backslash in Ihrem Beispiel ist auch ein Sonderzeichen.
Sie sollten also so etwas tun,
var ttt = "aa ///\\\\\\"; // --> ///\\\
oder
var ttt = "aa ///\\"; // --> ///\
Aber Escape-Zeichen nicht für Benutzereingaben erforderlich.
Wenn Sie drücken /
in Promptbox oder Eingabefeld dann absenden, das heißt Single /
.
10014200cookie-checkJavaScript-Backslash (\) in Variablen verursacht einen Fehleryes
scackoverflow entfernt meinen 1 Schrägstrich von überall, sogar in () gab es 1 Schrägstrich (\). Die eigentliche Schrägstrichfolge besteht aus 3 Schrägstrichen in einer Variablen
– Imrul
11. Oktober 2010 um 4:19 Uhr
Woher kommt der Eingabestring? Kommt es vom Browser selbst (vom Benutzer eingegeben) oder vom Backend (eingefügt von PHP/Perl/Ruby/etc..)? Ich frage, weil es so aussieht, als würden Sie versuchen, Javascript zu verwenden, um dies zu lösen, was absolut keinen Sinn ergibt. Alle Zeichenfolgen, die vom Benutzer direkt in den Browser eingegeben werden, sind bereits maskiert, sodass Sie keine Maskierung vornehmen müssen. Das einzige Problem wäre, was im Backend abgerufen wird.
– Schlafmann
11. Oktober 2010 um 4:41 Uhr
Ja, es handelt sich um Benutzereingaben aus HTML-Eingaben, die im Browser abgelegt wurden, und die Manipulation erfolgt nicht mit Javascript. Ich verwende ASP.NET (C#) im Backend. In ASP.NET gibt es keine „addslashes“-Funktion. Wenn dies serverseitig gelöst werden kann, ist es auch für mich in Ordnung.
– Imrul
11. Oktober 2010 um 4:46 Uhr
@Imrul, lange Rede kurzer Sinn, auf der Client-Seite wirst du es tun verfügen über Quellcode buchstäblich einzulesen
var ttt = "aa ///\\\\\\";
. Versuchen Sie, das zu erreichen. Wenn Sie C# verwenden, warum haben Sie uns Links zu PHP gegeben? Sie sollten Ihren C#-Code posten.– besser leben
11. Oktober 2010 um 4:52 Uhr
Sie können dies nicht in Javascript lösen (da es sich dann bereits um einen Syntaxfehler handelt). Taggen Sie Ihre Frage erneut als ASP.NET und zeigen Sie uns, wie Sie die Zeichenfolge in ASP einfügen.
– Schlafmann
11. Oktober 2010 um 5:53 Uhr