自动完成正则表达式过滤

时间:2016-06-09 01:25:10

标签: c# ajax regex jquery-ui-autocomplete webmethod

我正在使用jquery-ui-autocomplete开发一个具有自动完成功能的文本框。我无法让它像我想要的那样运作。首先,我有一个公司表,其中一些列值是缩写的。)A.B.C。 Corp ..具有此自动完成功能的所有内容均有效,除了您键入的所需功能:abc corp或ABC corp它将与A.B.C匹配。公司,但它没有:(它只匹配你输入a.b.c. corp。这是我的代码到目前为止: 我不完全确定如何去做。 任何正确方向的小费都非常受欢迎。 我怎么能将abc corp与A.B.C匹配。公司? 我目前的方式不起作用

Regex.Match(hint, "/([A-Za-z\\.])/g"

由于 客户方:

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <link href="Content/themes/base/all.css" rel="stylesheet" />
    <script src="Scripts/jquery-1.10.2.min.js"></script>
    <script src="Scripts/jquery-ui-1.11.4.min.js"></script>
    <asp:TextBox runat="server" ID="customerSearch"></asp:TextBox>
    <script type="text/javascript">
        $(document).ready(function () {
            $("#MainContent_customerSearch").autocomplete({
                source: function (request, response) {
                    $("#MainContent_customerSearch").on("change keyup", function () {
                        var hint = { hint: $("#MainContent_customerSearch").val() };
                        //call webmethod
                        $.ajax({
                            type: "POST",
                            url: "Default.aspx/getProducts",
                            data: JSON.stringify(hint),
                            dataType: "json",
                            contentType: "application/json; charset=utf-8",
                        }).success(function (data) {
                            response($.map(data.d, function (item) {
                                return {
                                    label: item.Description,
                                    value: item.Description
                                }
                            }));
                        }).error(function (error) {
                            console.log(error);
                        });
                    });
                },
                delay: 0,
                minLength: 1,
                autoFocus: true

            });
        });
    </script>
</asp:Content>

服务器端:

public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        { }


        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public static List<Product> getProducts(string hint)
        {
            List<Product> products = new List<Product>();
            using (var db = new AppDB())
            {
                try
                {
                    products = db.Products.Where(p => p.Description.Contains(hint)).ToList();
                }
                catch
                { }
            }
            return products;
        }
    }

1 个答案:

答案 0 :(得分:0)

我们的想法是忽略公司名称中的特殊字符

_Default

添加私有帮助器方法
private string RemoveSpecialChars(string @string)
{
    return @string.Where(char.IsLetterOrDigit).Aggregate(new StringBuilder(), (s, c) => s.Append(c)).ToString();
}

然后像这样改变你的WebMethod

public static List<Product> getProducts(string hint)
{
    List<Product> products = new List<Product>();
    using (var db = new AppDB())
    {
        try
        {
            products = db.Products.Where(p => RemoveSpecialChars(p.Description).Contains(RemoveSpecialChars(hint))).ToList();
        }
        catch
        { }
    }
    return products;
}