Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript backslash (\) in variables is causing an error

Tags:

javascript

In Javascript, when I put a backslash in some variables like:

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

Javascript shows an error.

If I try to restrict user in entering this character, I also get an error:

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

Restricting backslashes from user input is not a good strategy, because you have to show an annoying message to the user.

Why am I getting an error with backslash?

like image 377
Imrul Avatar asked Oct 11 '10 04:10

Imrul


People also ask

How do you escape a backward slash in JavaScript?

The backslash() is an escape character in JavaScript. The backslash \ is reserved for use as an escape character in JavaScript. To escape the backslash in JavaScript use two backslashes.

How do you add a backslash in JavaScript?

In JavaScript, the backslash has special meaning both in string literals and in regular expressions. If you want an actual backslash in the string or regex, you have to write two: \\ .

How do you handle a backslash in a string?

If you want to include a backslash character itself, you need two backslashes or use the @ verbatim string: var s = "\\Tasks"; // or var s = @"\Tasks"; Read the MSDN documentation/C# Specification which discusses the characters that are escaped using the backslash character and the use of the verbatim string literal.

How do you use backslash in node JS?

When you set the variable, the escaped backslash is interpreted into a single codepoint. However, options is an object which, when logged, appears as a JSON blob. The backslash is re-escaped at this point, as this is the only way the backslash can appear validly as a string value within the JSON output.


2 Answers

The backslash (\) is an escape character in Javascript (along with a lot of other C-like languages). This means that when Javascript encounters a backslash, it tries to escape the following character. For instance, \n is a newline character (rather than a backslash followed by the letter n).

In order to output a literal backslash, you need to escape it. That means \\ will output a single backslash (and \\\\ will output two, and so on). The reason "aa ///\" doesn't work is because the backslash escapes the " (which will print a literal quote), and thus your string is not properly terminated. Similarly, "aa ///\\\" won't work, because the last backslash again escapes the quote.

Just remember, for each backslash you want to output, you need to give Javascript two.

like image 78
Daniel Vandersluis Avatar answered Oct 17 '22 07:10

Daniel Vandersluis


You may want to try the following, which is more or less the standard way to escape user input:

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

This replaces all backslashes with an escaped backslash, and then proceeds to escape other non-printable characters to their escaped form. It also escapes single and double quotes, so you can use the output as a string constructor even in eval (which is a bad idea by itself, considering that you are using user input). But in any case, it should do the job you want.

like image 45
Roy Sharon Avatar answered Oct 17 '22 07:10

Roy Sharon