如何使用RegEx用双反斜杠替换反斜杠?

时间:2011-12-30 23:17:55

标签: javascript regex

我需要使用javascript修改该值,以使其可以作为SQL插入查询的一部分进行放置。

目前我有以下代码来处理单引号'字符。

value = value.replace(/'/g, "\\'");

此代码无问题。现在我注意到独立的反斜杠导致错误。

如何删除那些独立的反斜杠?

2 个答案:

答案 0 :(得分:21)

  

现在我注意到独立的反斜杠导致了错误。

您正在操作的字符串中的反斜杠对替换'字符无任何影响。如果您的目标是替换反斜杠字符,请使用:

value = value.replace(/\\/g, "whatever");

...将用“what”替换字符串中的所有反斜杠。请注意,我必须写两个反斜杠而不是一个。这是因为在regular expression literal中,反斜杠用于引入各种特殊字符和字符类,并且还用作转义 - 正则表达式文字中的两个反斜杠(如字符串中)表示单个实际反斜杠在字符串中。

要将单个反斜杠更改为两个反斜杠,请使用:

value = value.replace(/\\/g, "\\\\");

请注意,再次,要在替换字符串中获取文字反斜杠,我们必须转义两者中的每一个 - 在替换字符串中总共产生四个。

  

我需要使用javascript修改该值,以使其可以作为SQL插入查询的一部分。

您不想手动执行此操作。任何允许您进行数据库查询的技术(JDBC,ODBC等)都将提供某种形式的准备好的参数化语句(link),它为您处理这些逃避问题。几乎可以保证在您的软件中留下可能被利用的安全漏洞。您希望使用必须考虑这一点的团队的工作,并在问题曝光时定期更新生成的代码,而不是单独飞行。此外,如果您的JavaScript在客户端上运行(大多数情况下,但绝不是全部 - 我一直在使用JavaScript服务器端),那么没有你要做的就是逃避字符串可以使它成为可能安全,因为客户端对服务器的请求可能是欺骗性的,完全绕过客户端代码。

答案 1 :(得分:3)

你应该使用某种数据库库提供的转义函数,滚动你自己只会造成麻烦。