如何自动添加Double Quotes以通过Javascript包含字符串?

时间:2011-05-27 01:21:08

标签: javascript regex

我想自动附上带双引号的搜索字词

例如

<input type="text" name="keywords" value="" id="search" size="17" />
<input type="submit" value="Go">

访问者尝试搜索短语= long enough(它包含2个单词,中间有空格)

我需要将字符串long enough作为"long enough"传递给服务器端(PHP)

我不想告诉访问者使用双引号搜索短语,对于访问者来说搜索应该很容易。

目前,当访问者输入一个单词long的搜索字词时,搜索结果会显示正确的文章。

但是,当访问者使用短语long enough或任何其他短语时,使用至少2个字词,搜索结果就不准确,因为搜索会将long enough视为2个单独的搜索字词。

为了获得准确的搜索结果,ExpressionEngine CMS希望访问者输入"long enough" [任何短语用双引号括起来]

这就是我想要自动执行的操作,当访问者搜索一个单词时,它应该保留关键字并让它通过而不带任何引号,但是当访问者使用2个或更多单词时,搜索表单应该传递这些短语双引号


由@Jonathon Wisnoski提供的代码按照我的要求工作,但有一个缺点

 <script type="text/javascript">
        function quoteWords() {
            var search = document.getElementById("search_box");
            search.value = search.value.replace(/^\s*|\s*$/g, ""); //trim string of ending and beginning whitespace
            if(search.value.indexOf(" ") != -1){ //if more then one word
                search.value = search.value.replace(/^"*|"*$/g, "\"");
            }
        }
  </script>

问题:当手动添加双引号并按下提交时,它会中断,最后会输入一个额外的双引号。正则表达式代码应该看看双引号是否存在,它不应该添加任何东西。

因此"long enough""long enough""

任何人都可以检查正则表达式代码,以便了解如何解决此问题。

3 个答案:

答案 0 :(得分:3)

您应该只是处理字符串,而不是服务器端。任何使用JavaScript预处理的内容都不能依赖。

但是,如果您确实想这样做,则会有一个名为quote()的非标准String方法。

但是,因为它不标准,我会使用......

str = '"' + str.replace(/^"*|"*$/, '') + '"';

这会剥离前导和尾随",然后再次在"中包裹字符串。

答案 1 :(得分:1)

这应该这样做:

<input type="text" name="keywords" value="" id="search" size="17" />
<input onClick='var search = document.getElementById("search"); search.value = search.value.replace(/^\s*|\s*$/g, ""); if(search.value.indexOf(" ") != -1){search.value = search.value.replace(/^"*|"*$/g, "\"")}' type="submit" value="Go">

或者使用脚本标记中的脚本:

<script type="text/javascript">
    function quoteWords() {
        var search = document.getElementById("search");
        search.value = search.value.replace(/^\s*|\s*$/g, ""); //trim string of ending and beginning whitespace
        if(search.value.indexOf(" ") != -1){ //if more then one word
            search.value = search.value.replace(/^"*|"*$/g, "\"");
        }
    }
</script>
<input type="text" name="keywords" value="" id="search" size="17">
<input onClick="quoteWords()" type="submit" value="Go">

答案 2 :(得分:1)

因为你试图在某种程度上验证输入,所以做一些更一般的事情可能更有意义 - 例如,如果用户输入“foo”bar“,你可能希望它最终看起来比如“foo bar”。所以而不是:

str = '"' + str.replace(/^"*|"*$/g, '') + '"'

您可能想要执行以下操作:

str = '"' + str.replace(/"/g, '') + '"'

以后再看看会更简单。