如何创建一个接受正则表达式搜索数据的搜索框?

时间:2015-12-16 07:29:10

标签: javascript regex sapui5

如果用户输入“Mil *”,则搜索应返回“Milk”,“Milk Cake”,“Milk sweet”,“Milky bar chocolate”...... 我正在尝试创建一个SAP UI5应用程序,其中过滤器理解正则表达式。然后结果显示在表格中。

 var oFilter = new sap.ui.model.Filter({
                        path     : "ProductName", 
                        operator : CustomFilterToAcceptRegEx,
                        value1   : "Milk"
                    });

无论如何我都想不到这样做。任何意见将是有益的。 我是全新的javascript& SAP UI5

1 个答案:

答案 0 :(得分:2)

您上面的代码无法正常运行,因为您传递的运算符绝对无效,请参阅API docs for sap.ui.model.Filter。仅使用允许的FilterOperators之一。这是一个例子:

var oFilter = new sap.ui.model.Filter({
    path     : "ProductName", 
    operator : sap.ui.model.FilterOperator.Contains,
    value1   : "Milk"
});

上面的示例匹配“ Milk ”,这意味着用户不需要使用“*”,而是可以在(搜索)字段中输入“Milk”。

如果您想要允许类似“M * lk”的内容,您可以使用以下内容:

var oFilter = new sap.ui.model.Filter({
    path     : "ProductName", 
    test     : function(oValue){ 
        //do something
    },
    value1   : "Milk"
});

Constructor Details of sap.ui.model.Filter告诉您如何实施 oFilterInfo.test 功能:

  

函数,用于过滤应返回布尔值的项目,以指示当前项目是否被保留

但是,请注意OData,因为ODataModel实际上是服务器端模型。如果您将OData与SAP Gateway结合使用,则“自由文本”搜索可能比使用过滤器更好。 SAP GW识别用于自由文本搜索的查询参数“搜索”。然后,GW服务的实现应正确处理该参数......

另外,请确保真正了解javascript中的正则表达式是如何工作的。这是一个例子:

RegExp(".*world.*", "g").test("hello world");   // true

还要考虑如何转义搜索字符串以使其成为有效的正则表达式。您不能简单地传入从搜索框中收到的任何字符串。因此,在继续之前,首先要了解正则表达式如何工作...