jQuery自动完成:按首字母过滤

时间:2014-05-02 15:07:15

标签: javascript php jquery regex

出于某种原因,我无法通过首字母过滤文本框,而不是向我提供包含特定字母的所有字词。
以下是我希望如何使用它的示例:http://jsfiddle.net/miroslav/yLdn3/

这里是我的代码(一切正常,它从数据库表中获取地址,但如果我插入" a"它会给我所有包含&#34的地址; a& #34;,但我想要那些以" a")开头的那些。

getautocomplete.php

<?php
 mysql_connect("localhost","username","password");
 mysql_select_db("databasename");

 $term=$_GET["term"];

 $query=mysql_query("SELECT * FROM table where address like '%".$term."%'");
 $json=array();

    while($table=mysql_fetch_array($query)){
         $json[]=array(
                    'value'=> $table["address"],
                    'label'=>$table["address"]
                        );
    }

 echo json_encode($json);

?>

autocomplete.php

<html>
   <head>
        <script type="text/javascript"
        src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
        <script type="text/javascript"
        src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
        <link rel="stylesheet" type="text/css"
        href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" />

        <script type="text/javascript">
                $(document).ready(function(){
                        $("#address").autocomplete({
                                source:'getautocomplete.php',
                        });

        // Overrides the default autocomplete filter function to search only from the beginning of the string
        $.ui.autocomplete.filter = function (array, term) {
                var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(term), "i");
                return $.grep(array, function (value) {
                        return matcher.test(value.label || value.value || value);
                });
                };
        })();
        </script>
   </head>

   <body>

      <form method="post" action="">
             Name : <input type="text" id="address" name="address" />
      </form>

   </body>
<html>

2 个答案:

答案 0 :(得分:1)

在数据库查询中的术语之前删除%。它在regexp中的作用类似于.*,因此您可以使用.*term.*

答案 1 :(得分:0)

尝试使用此查询:

SELECT * FROM table where substr(address,1,1) like '%".$term."%'"