Javascript中不区分大小写的自动完成

Case-insensitive autocomplete in Javascript

本文关键字:大小写 不区 Javascript      更新时间:2023-11-18

我有一个用于自动完成功能的javascript代码。它突出显示在搜索框中输入的文本,并将其与数据库中的文本相匹配。这是区分大小写的,所以它只突出显示数据库表中的文本。我希望搜索不区分大小写。这是我现有的代码:

 <script type="text/javascript">
$(function() {
    var availableTags = [<?php echo $tagsString; ?>];
    $( "#tags" ).autocomplete({
      source: availableTags
    });
  });
 $.extend( $.ui.autocomplete.prototype, {
    _renderItem: function( ul, item ) {
        var term = this.element.val(),
            html = item.label.replace( term, "<span class='f1'>$&</span>" );
        return $( "<li></li>" )
            .data( "item.autocomplete", item )
            .append( $("<a></a>").html(html) )
            .appendTo( ul );
    }
});
</script>

在您的数据库代码中,在等式的两侧使用LOWER。

... WHERE LOWER(db_field) = LOWER(:text) ...

或者,您可以在将输入提供给数据库之前将其强制转换为lower,并在本例中省略右侧的LOWER

在LIKE 的情况下

... WHERE LOWER(db_field) like '%' || LOWER(:text) || '%' ...

请始终正确引用或更好地使用精简语句来防止SQL注入。

EDIT:找到了一种只使用绑定而不引用的更干净的方法

我假设您使用的是MySQL。

您可以降低字段名称和搜索值,

WHERE LOWER( db_table.db_field ) = LOWER(:text) // find exact match

或与lower一起使用:

WHERE  LOWER( db_table.db_field ) LIKE '%' || LOWER(:text) || '%'  // find all that have this text as substring

但在boh的情况下,请记住使用参数化状态,以避免SQL注入数据包。