我想自动附上带双引号的搜索字词
例如
<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""
任何人都可以检查正则表达式代码,以便了解如何解决此问题。
答案 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, '') + '"'
以后再看看会更简单。