为什么替换反斜杠代码在JS中不起作用?

时间:2012-10-03 20:13:17

标签: javascript replace backslash

我在JSP文件中的代码如下所示:

<s:form namespace="/user" action="list" method="POST" id="filterListForm" theme="simple"
        onsubmit="document.getElementById('filterSearchText').value=document.getElementById('filterSearchText').value.replace(/\\/g,'')">

它不会替换反斜杠char。我尝试过以下方法,但都没有效果:

replace('/\\/g','')
replace(/\\\\/g,'')
replace(\/\\\/g,'')

但如果我将其更改为以下内容,则可以:

<s:form namespace="/user" action="list" method="POST" id="filterListForm" theme="simple"
        onsubmit="replaceBackslash()">

<script type="text/javascript">
  function replaceBackslash() { document.getElementById('filterSearchText').value=document.getElementById('filterSearchText').value.replace(/\\/g,''); }
</script>

为什么?有没有办法让它在第一种情况下起作用?

2 个答案:

答案 0 :(得分:4)

你想:

var replaced = original.replace(/\\/g, '');

在正则表达式文字中,您需要做的就是将反斜杠加倍以引用它。

当您尝试通过JSP标记传递代码时,为什么它不起作用,那很可能是JSP为您修改字符串。 可能可以做到这一点:

<s:form ... onsubmit=' ... .replace(/\\\\/g, "") ... ' >

但是目前我没有办法尝试

编辑 - 实际上我发现这很有挑战性。它可能取决于您的标签库的功能。我的框架(Stripes)喜欢HTML-escape属性值,因此很难通过像&#92;这样的东西(好吧,不可能)。

答案 1 :(得分:0)

(这不是一个真正的解决方案,只是推荐解决这个问题的一般做法。)

底线:使用分离的Javascript。如果你认为把它完全分成不同的文件是太多的工作(尽管这可以帮助你干净地避免所有这些问题),至少把它全部放在底部的脚本标签中。它有助于分离布局和逻辑,并将所有Javascript保存在一个已知位置,使其更易于理解和维护。你甚至不需要onclick / onsubmit属性,你也可以在Javascript中分配它们(通常键入html #id属性)。如果你仍然使用on [event]属性,只需调用一个明智的命名函数,并将函数的实现放在主脚本中。