2014-04-22 99 views
0

我希望搜索名稱使用我的搜索模塊而忽略空格。如何搜索忽略單詞之間的空格?

例:如果我想搜索的名稱,如「A B Zilva」

我想DISPLY上下拉的結果,即使我鍵入比如「AB Zilva」這個名字。

目前沒有空間搜索工作不

$db = JFactory::getDbo(); 
$searchp=$_GET["term"]; 
$searchp = str_replace(' ','%%', trim($searchp)); 
//$searchp= preg_split('/ /', $searchp); 
$query = $db -> getQuery(true); 

$query="SELECT * FROM content where title like '%".$searchp."%'AND categories_id=82 order by title ASC "; 
$db -> setQuery($query); 
// Load the results as a list of associated arrays. 
$results = $db -> loadAssocList(); 
$json=array(); 
foreach ($results as $json_result) { 
    $json[] = array('value' => $json_result["title"], 'label' => $json_result["title"]); 
} 

請指點。

更新:

jQuery.extend(jQuery.ui.autocomplete.prototype, { 
       _renderItem: function(ul, item) { 
        var term = this.element.val(), 
         regex = new RegExp('(' + term + ')', 'gi'); 
        html = item.label.replace(regex , "<b>$&</b>"); 
        return jQuery("<li></li>") 
         .data("item.autocomplete", item) 
         .append(jQuery("<a></a>").html(html)) 
         .appendTo(ul); 
       } 
      }); 

回答

0

與您的代碼的問題是,當你與%%替換空間,你得到一個搜索:

WHERE title like '%AB%%Zilva%' 

但這不會匹配時標題是A B Zilva。您需要從搜索字符串和數據庫中的列中刪除空格。像這樣做:

$searchp = str_replace(' ', '', $searchp); 

,然後更改SQL語句:

WHERE REPLACE(title, ' ', '') LIKE '%$searchp%' 

對於JavaScript的高亮,我認爲你需要做的是:

var term = this.element.val().replace(/ /g, '').replace(/.(?=.)/g, '$& *'), 

這將創建一個正則表達式允許搜索字符串中任何字符之間的空格。

+0

感謝@Barmar,它的工作原理,你可以檢查我的問題的底部,我在哪裏放置了一個jQuery代碼。我用它來突出顯示哪一種類型的字。但是在我按照你所說的那樣做了改變之後,現在那個高調部分不工作了。也是影響到那個代碼。請通知 – user3559840

+0

查看已更新的答案 – Barmar

+0

感謝它的工作 – user3559840

相關問題