La barre oblique inverse (\) dans les variables provoque une erreur

Dans Javascript, lorsque j'ai mis une barre oblique inverse dans certaines variables comme:

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

Javscript montre une erreur.

Si j'essaie de restreindre l'utilisateur à entrer ce caractère, j'aurai également une erreur:

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

Restriction des barres obliques à partir de l'entrée de l'utilisateur n'est pas une bonne stratégie, car il faut montrer un message gênant à l'utilisateur.

Pourquoi est-ce que je reçois une erreur avec la barre oblique inverse?

La barre oblique inverse ( \ ) est un personnage d'échappement en Javascript (avec beaucoup d'autres langages similaires à C). Cela signifie que lorsque Javascript rencontre une barre oblique inverse, il essaie d'échapper au caractère suivant. Par exemple, \n est un caractère de nouvelle ligne (plutôt qu'une barre oblique inverse suivie de la lettre n).

Afin de produire une barre oblique invariable, vous devez l'échapper. Cela signifie que \\ sortira une seule barre oblique inverse (et \\\\ sortira deux, etc.). La raison pour laquelle "aa ///\" ne fonctionne pas, c'est parce que la barre oblique inverse le " (qui va imprimer une citation littérale), et donc votre chaîne n'est pas correctement terminée. De même, "aa ///\\\" gagné Je travaille, car la dernière barre oblique inverse échappe à la citation.

Rappelez-vous simplement, pour chaque barre oblique inverse que vous souhaitez produire, vous devez donner deux .

Vous voudrez essayer ce qui suit, qui est plus ou moins le moyen standard pour échapper à la saisie des utilisateurs:

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

Cela remplace toutes les barreaux obliques avec une barre oblique invariaquée échappée, puis évite d'échouer d'autres caractères non imprimables à leur forme échappée. Il échappe également à des guillemets simples et doubles, de sorte que vous pouvez utiliser la sortie en tant que constructeur de chaîne même dans eval (ce qui est une mauvaise idée en soi, étant donné que vous utilisez la saisie des utilisateurs). Mais en tout cas, il devrait faire le travail que vous voulez.

Vous devez échapper à chaque \ pour être \\ :

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

Mise à jour : je pense que cette question ne concerne pas le caractère d'échappement dans la chaîne. Le demandeur ne semble pas expliquer correctement le problème.

Car il fallait montrer un message à l'utilisateur que l'utilisateur ne peut pas donner un nom qui a un caractère (\).

Je pense que le scénario est comme:

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

Ensuite, le demandeur veut vérifier si user_input_name contient n'importe quel [ \ ]. Dans l'affirmative, alerte l'utilisateur.

Si l'utilisateur entre [ aa ///\ ] dans la zone de saisie HTML, alors si vous allez alert(user_input_name) , vous verrez [ aaa ///\ ]. Vous n'avez pas besoin d'échapper, c.-à-d. Remplacer [ \ ] par [ \\ ] dans le code JavaScript. Lorsque vous échappez, c'est parce que vous essayez de créer une chaîne contenant des caractères spéciaux dans le code source JavaScript. Si vous ne le faites pas, il ne sera pas correct. Comme vous obtenez déjà une chaîne, vous n'avez pas besoin de la transmettre dans une fonction d'échappement. Si vous le faites, je suppose que vous générez un autre code JavaScript à partir d'un code JavaScript, mais ce n'est pas le cas ici.

Je suppose que Asker veut simuler la contribution, afin que nous puissions comprendre le problème. Malheureusement, Asker ne comprend pas correctement JavaScript. Par conséquent, un code d'erreur de syntaxe nous est fourni:

 var ttt = "aa ///\"; 

Par conséquent, nous supposons que le demandeur a du mal à échapper.

Si vous souhaitez simuler, votre code doit être valide à la première place.

 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? 

Maintenant, il suffit de faire est

 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 : J'ai utilisé [] pour citer le texte à afficher, donc il serait moins confus que d'utiliser "" .

La barre oblique inverse est réservée pour être utilisée comme caractère d'échappement en Javascript.

Pour utiliser une barre oblique invariable, vous devez utiliser deux barres arrière

 \\ 

Le lien jsfiddle à l'endroit où j'ai essayé votre requête http://jsfiddle.net/A8Dnv/1/ fonctionne bien @Imrul comme mentionné que vous utilisez C # sur le côté du serveur et vous ne l'imaginez pas non plus: http://msdn.microsoft .com / fr-us / library / system.text.regularexpressions.regex.escape.aspx

Si vous souhaitez utiliser un caractère spécial dans la valeur de la variable javascript, Escape Character ( \ ) est requis.

Backslash dans votre exemple est également un caractère spécial.

Donc, vous devriez faire quelque chose comme ça,

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

ou

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

Mais Escape Character ne nécessite pas d'entrée pour les utilisateurs.

Lorsque vous appuyez sur / dans la zone d'invite ou dans le champ de saisie, puis soumettez, cela signifie un / .