2011-05-27 39 views
1

我想随函附上一个搜索词双引号如何自动添加双引号来通过Javascript附上一个字符串?

例如,

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

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

+2

“足够长”一词应该作为单个字符串出现在服务器上。如果你真的想要用双引号包装单个字符串,那么引号就是字符串的一部分,只需将它们添加到前面和后面。除非我错误理解你的问题? – Jeremy 2011-05-27 01:24:22

+1

为什么你的PHP脚本不能这样做?任何在客户端上做的事情都可以被绕过。另外,你不这样做是为了将它插入到一串SQL中,对吗? – Cameron 2011-05-27 01:25:58

+0

@Jeremy Heiler,我刚刚在原始问题中添加了更多信息。 – 2011-05-27 01:40:27

回答

1

既然你想验证输入在一定程度上,它可能会更有意义做一些更一般的事情 - 例如,如果用户输入“foo”bar“,你可能希望它最终看起来像”foo bar“那么代替:

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

您可能想要做这样的事情:

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

,这是一个简单了很多,在以后的样子。

+0

这是迄今为止最好的解决方案。如果出现问题,我会在这里发帖。 – 2011-05-27 09:11:32

3

你应该真的只处理字符串,就像服务器端的一样。不能依赖任何使用JavaScript预处理的东西。

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

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

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

这条前缘和后缘"然后在"再次包装的字符串。

+0

我将如何使用代码,我只有HTML搜索输入字段。 – 2011-05-27 01:36:03

+0

纠正我,如果我错了,我不是一个正则表达式专家,但这应该会更好(你忘了“g”): 'str = str.replace(/ ^“* |”* $/g ,''');' – Jonathon 2011-05-27 01:36:04

+0

但是我会如何使用上面的代码? – 2011-05-27 01:40:51

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

谢谢@Jonathon Wisnoski,虐待它,看看它是否有效 – 2011-05-27 01:42:13

+0

@Jonathon Wisnoski,它没有工作:( – 2011-05-27 01:43:45

+0

嗯,好的测试和回复给你 – Jonathon 2011-05-27 01:46:59