我希望使用我的搜索模块搜索名称而忽略空格。
Ex:如果我想搜索一个名字,如" A B Zilva"
我想在下拉列表中显示结果,即使我输入的名称如" 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 :(得分: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, '$& *'),
这将创建一个正则表达式,允许搜索字符串中任何字符之间的空格。