2010-10-11 13 views
24

In Javascript, wenn ich einen umgekehrten Schrägstrich in einigen Variablen wie gesagt:JavaScript Backslash () in Variablen verursacht einen Fehler

var ttt = "aa ///\\\"; 
var ttt = "aa ///\"; 

Javscript zeigt einen Fehler an.

Wenn ich versuche, Benutzer zu beschränken dieses Zeichen in der Eingabe, bekomme ich auch einen Fehler:

(("aaa ///\\\").indexOf('"') != -1) 

Beschränken Schrägstriche von Benutzereingabe ist keine gute Strategie, weil Sie eine ärgerliche Nachricht an den Benutzer zeigen .

Warum bekomme ich einen Fehler mit Backslash?

+0

scackoverflow meines 1 slashe Streifen, auch in() gibt es einen Schrägstrich (\\) verwenden müssen. Die tatsächliche Schrägstrichfolge besteht aus 3 Schrägstrichen in einer Variablen – Imrul

+0

Woher kommt die Eingabezeichenfolge? Ist es vom Browser selbst (Benutzer eingegeben) oder vom Backend (eingefügt von PHP/Perl/Ruby/etc ..)?Ich frage, weil es so aussieht, als würden Sie Javascript verwenden, um das zu lösen, was völlig sinnlos ist. Alle Strings, die vom Benutzer kommen und direkt im Browser eingegeben werden, sind bereits mit Escape-Zeichen versehen, so dass Sie keine Escapes ausführen müssen. Das einzige Problem wäre, was im Backend abgerufen wird. – slebetman

+0

Ja, es ist in Benutzereingabe von HTML-Eingabe im Browser abgelegt und Manipulation ist nicht mit Javascript. Ich benutze ASP.NET (C#) im Backend. Es gibt keine "addslashes" -Funktion in ASP.NET. Wenn dies auf der Serverseite gelöst werden kann, ist es auch für mich in Ordnung. – Imrul

Antwort

62

Der Backslash (\) ist ein escape character in Javascript (zusammen mit vielen anderen C-ähnlichen Sprachen). Das bedeutet, dass Javascript bei einem umgekehrten Schrägstrich versucht, das folgende Zeichen zu umgehen. Zum Beispiel ist \n ein Newline-Zeichen (anstelle eines Backslash gefolgt von dem Buchstaben n).

Um einen literalen Backslash ausgeben zu können, müssen Sie it escape. Das bedeutet, \\ wird einen einzelnen Backslash ausgeben (und \\\\ wird zwei ausgeben, und so weiter). Der Grund "aa ///\" funktioniert nicht, da der umgekehrte Schrägstrich die " (die ein literales Angebot drucken wird) entkommt, und damit Ihre Zeichenfolge nicht ordnungsgemäß beendet wird. Ebenso funktioniert "aa ///\\\" nicht, da der letzte Backslash wieder das Zitat entkommt.

Denken Sie daran, für jeden Backslash, den Sie ausgeben möchten, müssen Sie Javascript zwei geben.

+1

Ich denke, Sie verwirrt '//' mit '\\'. – Gumbo

+2

Ups, das passiert, wenn ich um 1:15 Uhr Antworten schreibe;) Fixed. –

+1

Große Erklärung. Ich stimme dafür 1 zu. Aber ich habe das nicht akzeptiert, weil ich die Antwort nicht bekommen habe. Die Eingabe liegt in der Hand des Benutzers und wenn der Benutzer versucht, diese Art von Sequenz einzugeben, ist es möglich, dies zu überwinden. – Imrul

4

Sie haben zu entkommen jeder \\\ sein:

var ttt = "aa ///\\\\\\"; 

Aktualisiert: Ich denke, diese Frage nicht über die Escape-Zeichen in Zeichenfolge ist überhaupt nicht. Der Fragesteller scheint das Problem nicht richtig zu erklären.

because you had to show a message to user that user can't give a name which has (\) character.

ich glaube, das Szenario wie ist:

var user_input_name = document.getElementById('the_name').value; 

Dann wird der Fragesteller prüfen möchte, ob user_input_name enthält jede [\]. Ist dies der Fall, warnen Sie den Benutzer.

Wenn der Benutzer [aa ///\] im HTML-Eingabefeld eingibt, werden Sie unter alert(user_input_name) [aaa ///\] sehen. Sie müssen nicht entkommen, d. H. Ersetzen [\] als [\\] in JavaScript-Code. Wenn Sie fliehen, liegt das daran, dass Sie versuchen, eine Zeichenfolge zu erstellen, die Sonderzeichen in JavaScript-Quellcode enthält. Wenn Sie es nicht tun, wird es nicht korrekt geparst werden. Da Sie bereits eine Zeichenfolge erhalten, müssen Sie sie nicht in eine Escape-Funktion übergeben. Wenn Sie dies tun, schätze ich, dass Sie einen anderen JavaScript-Code aus einem JavaScript-Code generieren, aber das ist hier nicht der Fall.

Ich vermute, Asker will die Eingabe simulieren, damit wir das Problem verstehen können. Leider versteht asker JavaScript nicht gut. Daher wird uns ein Syntaxfehlercode geliefert:

Daher nehmen wir an, dass der Fragesteller Probleme mit dem Entkommen hat.

Wenn Sie simulieren möchten, müssen Sie 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? 

Nun Sie nur tun müssen, ist

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: Früher habe ich [] Text zu zitieren gezeigt werden, so wäre es weniger verwirrt als "" verwenden.

+0

finden Sie diese Links http://javascript.about.com/library/bladdslash.htm & http://www.navioo.com/javascript/tutorials/Javascript_addslashes_1558.html sie taten das gleiche, aber wenn ich benutze var t = addslashes ("aa /// \\\") dann habe ich Fehler !! – Imrul

+0

Codieren Sie in PHP in Server-Seite? Weil 'var t' nicht wie eine PHP-Variablendeklaration aussieht. – livibetter

+0

Ich benutze Javascript, um dies zu lösen. Ich habe versucht, escape (string) und unescape (string) zu verwenden. Aber diese funktionierten nicht – Imrul

0

Die jsfiddle Link, wo ich http://jsfiddle.net/A8Dnv/1/ Ihre Anfrage ausprobiert seine adaequat @Imrul wie Sie bereits erwähnt sind C# auf Server-Seite verwenden und sich nicht kümmern, dass entweder: http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.escape.aspx

+0

HTML ist kein JavaScript. – Gumbo

+0

@Gumbo und dein Punkt ist ??? btw imrul sagte "ja, es ist in der Benutzereingabe von HTML-Eingabe im Browser abgelegt" wäre hilfreich, wenn Sie Dank danken könnten – jknair

6

Sie können die folgenden versuchen, die mehr oder weniger der normalen Weg ist eine Benutzereingabe zu entkommen:

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 Schrägstriche mit einem entflohenen Backslash, und geht dann andere nicht druckbare zu entkommen Zeichen in ihre ausgeblendete Form. Es entkoppelt auch einfache und doppelte Anführungszeichen, so dass Sie die Ausgabe auch in eval als Zeichenfolgenkonstruktor verwenden können (was allein schon eine schlechte Idee ist, wenn man bedenkt, dass Sie Benutzereingaben verwenden). Aber auf jeden Fall sollte es die Arbeit machen, die Sie wollen.

+0

Bitte führen Sie dies, nachdem Sie Ihre Funktion in HTML HEAD hinzufügen. Sie werden den Unterschied sehen. – Imrul

+0

@Imrul, nicht sicher, ich verstehe. Das Schreiben eines * Skripts * mit "aa /// \\\" ist nicht dasselbe wie das Erhalten von "aa /// \\\" als Eingabe vom Benutzer. Im ersten Fall werden der dreifache Backslash und die folgenden doppelten Anführungszeichen als ein einzelner umgekehrter Schrägstrich gefolgt von doppelten Anführungszeichen interpretiert. Im letzteren Fall wird die Eingabe wortwörtlich interpretiert und enthält die drei umgekehrten Schrägstriche. Die Funktion stringEscape() konvertiert eine Benutzereingabe in ein Zeichenfolgenliteral in Skriptform. Ich dachte, das ist es, was du erreichen wolltest, oder? –

0

Wenn Sie Sonderzeichen in JavaScript-Variablenwert verwenden möchten, ist Escape-Zeichen (\) erforderlich.

Backslash in Ihrem Beispiel ist Sonderzeichen.

So sollten Sie etwas tun,

var ttt = "aa ///\\\\\\"; // --> ///\\\ 

oder

var ttt = "aa ///\\"; // --> ///\ 

Aber Escape-Zeichen nicht für eine Benutzereingabe erfordern.

Wenn Sie / in der Eingabeaufforderungsbox oder dem Eingabefeld drücken, dann senden Sie, das bedeutet Single /.

2

Der Backslash \ ist für die Verwendung als Escape-Zeichen in Javascript reserviert.

einen umgekehrten Schrägstrich verwenden Sie buchstäblich von überall zwei Schrägstriche

\\ 
Verwandte Themen