La barra rovesciata JavaScript (\) nelle variabili sta causando un errore

In Javascript, quando inserisco una barra rovesciata in alcune variabili come:

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

Javscript mostra un errore.

Se provo a limitare l’accesso dell’utente a questo carattere, ricevo anche un errore:

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

Limitare il backslash dall’input dell’utente non è una buona strategia, perché devi mostrare un messaggio fastidioso all’utente.

Perché ricevo un errore con il backslash?

Il backslash ( \ ) è un carattere di escape in Javascript (insieme a molte altre lingue simili a C). Ciò significa che quando Javascript incontra una barra rovesciata, prova a sfuggire al seguente carattere. Ad esempio, \n è un carattere di nuova riga (piuttosto che una barra rovesciata seguita dalla lettera n).

Per generare una barra rovesciata letterale, è necessario sfuggirla. Ciò significa che \\ genererà un singolo backslash (e ne usciranno due e così via). La ragione per cui "aa ///\" non funziona è perché il backslash sfugge a " (che stamperà una citazione letterale), e quindi la tua stringa non viene terminata correttamente. Allo stesso modo, "aa ///\\\" vinto funziona, perché l’ultima barra rovesciata di nuovo sfugge alla citazione.

Ricorda, per ogni backslash che vuoi produrre, devi dare due Javascript.

Si consiglia di provare quanto segue, che è più o meno il modo standard per sfuggire all’input dell’utente:

 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); } } 

Questo sostituisce tutti i backslash con una barra rovesciata di escape e quindi procede a sfuggire ad altri caratteri non stampabili nel loro modulo di escape. Sfugge anche le virgolette singole e doppie, quindi puoi usare l’output come costruttore di stringhe anche in eval (che è una ctriggers idea da sola, considerando che stai usando l’input dell’utente). Ma in ogni caso, dovrebbe fare il lavoro che vuoi.

Devi sfuggire a ogni \ per essere \\ :

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

Aggiornato : Penso che questa domanda non riguardi affatto il carattere di escape nella stringa. Il richiedente non sembra spiegare il problema correttamente.

perché dovevi mostrare un messaggio all’utente che non può dare un nome che abbia un carattere (\).

Penso che lo scenario sia come:

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

Quindi il richiedente vuole verificare se user_input_name contiene [ \ ]. Se è così, avvisa l’utente.

Se l’utente immette [ aa ///\ ] nella casella di input HTML, se si alert(user_input_name) , verrà visualizzato [ aaa ///\ ]. Non è necessario eseguire l’escape, ovvero sostituire [ \ ] per essere [ \\ ] nel codice JavaScript. Quando esegui l’escaping, è perché stai cercando di creare una stringa che contiene caratteri speciali nel codice sorgente JavaScript. Se non lo fai, non verrà analizzato correttamente. Poiché hai già una stringa, non è necessario trasferirla in una funzione di escape. Se lo fai, suppongo che tu stia generando un altro codice JavaScript da un codice JavaScript, ma non è questo il caso.

Sto indovinando chi chiede vuole simulare l’input, in modo che possiamo capire il problema. Sfortunatamente, il richiedente non capisce bene JavaScript. Pertanto, viene fornito un codice di errore di syntax:

 var ttt = "aa ///\"; 

Quindi, supponiamo che il richiedente abbia problemi con la fuga.

Se vuoi simulare, il codice deve essere valido al primo posto.

 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? 

Ora, devi solo farlo

 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(); } 

Modifica : ho usato [] per citare il testo da mostrare, quindi sarebbe meno confuso dell'uso di "" .

Il backslash \ è riservato per l’uso come carattere di escape in Javascript.

Per utilizzare letteralmente una barra rovesciata è necessario utilizzare due barre retroverse

 \\ 

Il jsfiddle link a dove ho provato la tua query http://jsfiddle.net/A8Dnv/1/ funziona bene @Imrul come accennato stai usando C # sul lato server e non ti dispiace che entrambi: http://msdn.microsoft .com / it-it / library / system.text.regularexpressions.regex.escape.aspx

Se si desidera utilizzare un carattere speciale nel valore della variabile javascript, è richiesto Escape Character ( \ ).

Anche la barra rovesciata nell’esempio è un carattere speciale.

Quindi dovresti fare qualcosa del genere,

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

o

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

Ma Escape Character non richiede l’input dell’utente.

Quando si preme / nella casella di richiesta o nel campo di immissione, quindi invia, significa singolo / .