2010-10-11 13 views
24

in JavaScript, quando ho messo un backslash in alcune variabili come:backslash JavaScript () nelle variabili sta causando un errore

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

javscript mostra un errore.

Se provo a limitare l'utente ad entrare in questo personaggio, ho anche ottenere un errore:

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

Limitazione backslash da input dell'utente non è una buona strategia, perché bisogna mostrare un messaggio di fastidioso per l'utente .

Perché ricevo un errore con barra rovesciata?

+0

scackoverflow spogliare il mio 1 slashe da ogni dove, anche in() c'era 1 barra (\\). la sequenza reale di slash è 3 barre in una variabile – Imrul

+0

Da dove viene la stringa di input? Proviene dal browser stesso (utente inserito) o dal back-end (inserito da PHP/Perl/Ruby/etc ..)?Lo chiedo perché sembra che tu stia cercando di usare javascript per risolvere tutto ciò che non ha assolutamente senso. Tutte le stringhe che provengono dall'utente digitato direttamente nel browser sono già state scappate quindi non è necessario eseguire alcuna operazione di escape. L'unico problema sarebbe quello che viene recuperato nel back-end. – slebetman

+0

sì, è nell'input dell'utente dall'input HTML archiviato nel browser e la manipolazione è non utilizzare javascript. Io uso ASP.NET (C#) nel back-end. Non esiste alcuna funzione 'addslashes' in ASP.NET. Se questo può essere risolto in Lato server, allora va bene anche per me. – Imrul

risposta

62

La barra rovesciata (\) è un escape character 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 (anziché una barra rovesciata seguita dalla lettera n).

Per generare una barra rovesciata letterale, è necessario sfuggire a it. Ciò significa che \\ genererà un singolo backslash (e \\\\ ne produrrà due e così via). Il motivo "aa ///\" non funziona perché la barra rovesciata sfugge allo " (che stamperà una citazione letterale) e quindi la stringa non viene terminata correttamente. Allo stesso modo, "aa ///\\\" non funzionerà, perché l'ultima barra inversa sfugge nuovamente alla citazione.

Basta ricordare, per ogni barra retroversa che si desidera produrre, è necessario fornire Javascript due.

+1

Penso che tu abbia confuso '//' con '\\'. – Gumbo

+2

Oops, ecco cosa succede quando scrivo le risposte alle 1:15;) Risolto. –

+1

Grande spiegazione. Dò 1 voto per questo. Ma non l'ho accettato perché non ho avuto la risposta. L'input è nella mano dell'utente e se l'utente tenta di inserire questo tipo di sequenza, allora è possibile superarlo. – Imrul

4

Dovete fuggire ogni \ per essere \\:

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

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

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

penso che lo scenario è simile:

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

Poi il richiedente vuole verificare se user_input_name contiene alcun [\]. Se è così, avvisa l'utente.

Se l'utente immette [aa ///\] nella casella di input HTML, quindi se si alert(user_input_name), verrà visualizzato [aaa ///\]. Non è necessario fuggire, cioè sostituire [\] in [\\] nel codice JavaScript. Quando esegui l'escaping, significa che 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 supponendo che il richiedente voglia simulare l'input, in modo che possiamo capire il problema. Sfortunatamente, il richiedente non capisce bene JavaScript. Pertanto, un codice di errore di sintassi essendo alimentato a noi:

var ttt = "aa ///\"; 

Quindi, si assumono la richiedente avendo problema della fuoriuscita.

Se si desidera 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, avete solo bisogno di fare è

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

Edit: ho usato [] citare il testo da visualizzare, quindi sarebbe meno confuso rispetto all'utilizzo "".

+0

si prega di vedere questo link http://javascript.about.com/library/bladdslash.htm e http://www.navioo.com/javascript/tutorials/Javascript_addslashes_1558.html hanno fatto la stessa cosa ma se io uso var t = addslashes ("aa /// \\\") quindi ho ricevuto errore !! – Imrul

+0

Stai codificando in PHP sul lato server? Perché 'var t' non sembra una dichiarazione di variabili PHP. – livibetter

+0

sto usando javascript per risolvere questo. Ho provato a usare escape (stringa) e unescape (stringa). Ma questi non funzionavano neanche – Imrul

0

Il collegamento jsfiddle al punto in cui ho provato la query http://jsfiddle.net/A8Dnv/1/ il suo bel lavoro @Imrul come lei ha ricordato sono utilizzando C# sul lato server e non vi dispiace che: http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.escape.aspx

+0

HTML non è JavaScript. – Gumbo

+0

@gumbo e il tuo punto di essere ??? btw imrul ha dichiarato "sì, è in input dell'utente dall'input HTML archiviato nel browser" sarebbe utile se potesse elaborare grazie – jknair

6

Si consiglia di provare la seguente, che è più o meno il modo standard per sfuggire l'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 tutte le barre rovesciate con una barra rovesciata fuggito, e poi procede per sfuggire altri non stampabile personaggi alla loro forma di fuga. Sfugge anche le virgolette singole e doppie, quindi puoi usare l'output come costruttore di stringhe anche in eval (che è una cattiva idea da sola, considerando che stai usando l'input dell'utente). Ma in ogni caso, dovrebbe fare il lavoro che vuoi.

+0

Si prega di eseguire questo dopo aver aggiunto la funzione in HTML HEAD. Vedrai la differenza. – Imrul

+0

@ Imrul, non sono sicuro di aver capito. Scrivere uno * script * usando "aa /// \\\" non equivale a ottenere "aa /// \\\" come input dall'utente. Nel primo caso, il triplo backslash e le doppie virgolette che seguono sono interpretati come una singola barra rovesciata seguita da virgolette doppie. Nel caso successivo l'input è interpretato letteralmente e contiene i tre backslash. La funzione stringEscape() converte un input utente in una stringa letterale in forma di script. Pensavo che questo fosse ciò che stavi cercando di ottenere, no? –

0

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

La barra rovesciata nell'esempio è anch'essa un carattere speciale.

così si dovrebbe fare qualcosa di simile,

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

o

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

Ma carattere di escape non richiedono l'input dell'utente.

Quando si preme / nella casella prompt o nel campo di immissione, quindi inviare, ciò significa che il numero è /.

2

Il backslash \ è riservato per l'utilizzo come carattere di escape in Javascript.

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

\\ 
Problemi correlati