如何通过Javascript自动添加双引号来括起字符串

How to automatically add Double Quotes to enclose a string via Javascript?

本文关键字:字符串 Javascript 何通过 添加      更新时间:2023-09-26

我想用自动双引号括起一个搜索词

例如

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

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

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

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

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

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

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

这就是我想自动做的,当访问者搜索一个单词时,它应该留下关键字,让它在没有任何引号的情况下通过,但当访问者使用两个或更多单词时,搜索表单应该在双引号中通过这些短语


@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""成为

任何人都可以检查regex代码,看看如何解决这个问题吗。

您实际上应该像服务器端那样处理字符串。任何用JavaScript预处理过的东西都不可靠。

但是,如果您确实想这样做,那么有一个非标准的String方法,称为quote()

然而,因为它是非标准的,我会使用。。。

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

这剥去前导和尾随的",然后在"中再次缠绕字符串。

由于您试图在某种程度上验证输入,所以做一些更通用的事情可能更有意义-例如,如果用户输入"foo"bar",您可能希望它最终看起来像"foo bar"

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

你可能想做一些类似的事情:

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

这在以后的研究中要简单得多。

这应该做到:

<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">