我的页面上有一些预定义的过滤器选项来过滤我的数据表。单击一个时,它将添加到特定列的过滤器中。但是我对空格有一个很大的问题......比如我有这些选择:
“老而好”,“便宜又好”,“贵”
所有点击的选项都存储在一个数组中。对于过滤我做
var term = array.join('|'); //--> term = "old & good|cheap & nice|expensive"
dataTable.fnFilter(term, column, true, true);
如果没有带空格的字符串和“&”,它可以正常工作或只有一个。 一个独特的“廉价和优秀”正在发挥作用,但“便宜又好又不贵”并不......当没有空格时,“昂贵的|什么都有”。
如何让过滤器正常工作?
-------- ----------编辑
进一步解释:
我的代码从(用户定义的)csv导入数据,并为第一列生成一些按钮,一个按钮用于此列中的每个唯一条目。用户可以单击按钮来过滤表格,只显示单击的主菜单。该按钮将条目作为值获取,如本例所示。
<input type="button" value="cheap & nice" onclick="myFilterFunction(this)"/>
要知道单击了哪些按钮,它们的值将存储在正常数组中。我的单击回调函数查看此数组,将名称连接到一个正则表达式并将此字符串提供给fnFilter(),就像上面发布的那样。
只要没有包含空格的条目,这就可以正常工作。但我无法删除空格,因为那时过滤器找不到真正有空格的条目。
答案 0 :(得分:2)
最后,经过很长时间,我找到了解决问题的方法。
var array = ["old & good","cheap & nice","expensive"];
var regexp = array.join('|').replace("&", "\\&").replace(/\s/g, "\\s");
--> "old\s\&\sgood|cheap\s&\snice|expensive"
将这个词赋予fnFilter()
作品!
但是有一个函数可以很好,它可以将所有特殊字符转换为相应的正则表达式,以@BoomyJee建议的方式。如果有这样的功能,请告诉我。
答案 1 :(得分:1)
你应该引用特殊字符。
如果这是常量字符串,只需使用斜杠'old /&amp;好“
如果这是用户输入,则应使用引用功能。 JS中默认没有这样的功能,但您可以使用http://phpjs.org/functions/preg_quote/
function preg_quote (str, delimiter) {
return (str + '').replace(new RegExp('[\&.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + (delimiter || '') + '-]', 'g'), '\\$&');
}
因此,如果您有以下用户输入:
var input = ["old & good","cheap & nice","expensive"];
var regexp_string = input.map(function(val){ return preg_quote(val,"/") }).join("|");
答案 2 :(得分:0)