如何搜索忽略单词之间的空格?

时间:2014-04-22 10:26:32

标签: mysql json search autocomplete

我希望使用我的搜索模块搜索名称而忽略空格。

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 );
              }
          });

1 个答案:

答案 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, '$& *'),

这将创建一个正则表达式,允许搜索字符串中任何字符之间的空格。