2011-05-27 32 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