Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有'的正则表达式;或';条件不存在';无法在数据表fnFilter中工作_Javascript_Jquery_Regex_Datatable_Jquery Datatables - Fatal编程技术网

Javascript 带有'的正则表达式;或';条件不存在';无法在数据表fnFilter中工作

Javascript 带有'的正则表达式;或';条件不存在';无法在数据表fnFilter中工作,javascript,jquery,regex,datatable,jquery-datatables,Javascript,Jquery,Regex,Datatable,Jquery Datatables,我正在使用DataTables 1.9.6,并尝试为我的项目进行列多重筛选,使用DataTables的fnFilter函数,但运气不好。我在论坛上尝试了所有建议的方法来让它工作,但仍然无法让它工作 我的问题是,用于筛选列的或运算符“|”甚至带有字符串值的“| |”不起作用 以下是我在DataTables论坛上发布的问题: 我使用DataTables调试书签来上传我的DataTables,调试代码是“olohos” 我的问题是,用于筛选列的或运算符“|”甚至带有字符串值的“| |”在我的web应

我正在使用DataTables 1.9.6,并尝试为我的项目进行列多重筛选,使用DataTables的fnFilter函数,但运气不好。我在论坛上尝试了所有建议的方法来让它工作,但仍然无法让它工作

我的问题是,用于筛选列的或运算符“|”甚至带有字符串值的“| |”不起作用

以下是我在DataTables论坛上发布的问题:

我使用DataTables调试书签来上传我的DataTables,调试代码是“olohos”

我的问题是,用于筛选列的或运算符“|”甚至带有字符串值的“| |”在我的web应用程序中不起作用

例如,如果我有下面的代码

$('.search_init').keyup(function()
{
var asEscapedFilters = [];
asEscapedFilters[0] = $(this).val();
asEscapedFilters[1] = 'Y';
oTable.fnFilter(asEscapedFilters[0] | asEscapedFilters[1], $('#example tr.inputs input').index(this), true, false);
});
并在“订单活动”列的搜索区域中输入字符串“I”,它应该返回包含“订单活动”列的“I”或“Y”的所有行。相反,它返回零行

如果我使用“| |”而不是下面的“|”

$('.search_init').keyup(function()
{
var asEscapedFilters = [];
asEscapedFilters[0] = $(this).val();
asEscapedFilters[1] = 'Y';
oTable.fnFilter(asEscapedFilters[0] || asEscapedFilters[1], $('#example tr.inputs input').index(this), true, false);
});
对于“Order Active”列,它返回具有“Y”的行,但不返回具有“I”的行

我已经花了很多时间,在这个问题上看,任何有用的建议得到这项工作是非常感谢

处理是服务器端的,是否需要它处理任何其他语法或设置


以及DataTables BookMarklet结果

感谢您对这项工作的任何帮助


非常感谢。

我不明白您所说的“处理是服务器端的”是什么意思。您显示的代码都是JavaScript代码,并且在浏览器中运行

因此,您有JavaScript代码,但这里没有正则表达式:

oTable.fnFilter(asEscapedFilters[0] | asEscapedFilters[1], $('#example tr.inputs input').index(this), true, false);
因此,您的代码中最重要的是JavaScript操作符

在您的另一次尝试中,是JavaScript操作符

DataTables文档说明,第一个参数是“{string}:string以筛选表”,第三个参数是一个标志,指示是按原样还是按正则表达式处理字符串。因此,您需要创建一个字符串,它将是的构造函数的有效输入

每当从用户输入或源代码外部的任何源获取文本(字符串)时,都需要对其进行适当处理,以避免在应用正则表达式等进一步处理时出现意外错误和安全漏洞,如代码注入。这同样适用于SQL、shell命令、HTML以及将由计算机解析和处理的任何其他内容。不幸的是,当我搜索时,我发现JavaScript标准库没有为您提供任何内置函数。MDN文档提供了一个函数,您可以在代码中包含该函数,以便在使用它生成正则表达式之前正确地转义用户的输入。请参阅下面我列出的参考资料

对代码的更正如下:

$('.search_init').keyup(function()
    {
    var asEscapedFilters = [];
    asEscapedFilters[0] = $(this).val();
    asEscapedFilters[1] = 'Y';
    var filterPattern = escapeRegExp(asEscapedFilters[0])
                        + "|" + escapeRegExp(asEscapedFilters[1]);
    oTable.fnFilter(filterPattern, $('#example tr.inputs input').index(this), true, false);
    });
请注意,此代码中的
|
不是JavaScript运算符,而是字符串中的字符。该字符串将由datatables库传递给
RegExp()
的构造函数。我创建了另一个局部变量来增加函数调用的可读性,方法是保持参数更简单,因此更紧凑,并具有描述性名称。如果模式的第二部分始终是常量,则不需要对其进行转义,您可以这样编写:
var filterPattern=escapeRegExp($(this).val())+“|Y”

参考资料:


  • (请特别查看正则表达式中特殊字符表下方的部分,以及标题为“使用括号”的部分上方的部分)

感谢您调查这个问题。fnFilter函数有6个参数,根据它的定义,我们可以将过滤器字符串(第一个参数)作为正则表达式输入。如果我们希望将筛选器字符串视为正则表达式,则第三个参数应为true。请参阅。但这里的问题是,我是否给了它正确的正则表达式。也就是说,“|”可以用来生成正则表达式。i、 ex | y与x或y匹配。我想链接到fnFilter()的文档,但没有找到链接的方法。美好的我以前读过它,但是我没有读第一个参数之后的参数,所以我错过了关于将字符串视为正则表达式的标志。我确实解释过,您的代码是JavaScript按位OR运算符。“|”符号不是正则表达式。它可以在作为交替运算符的正则表达式中使用。我将修改我的答案,解释如何将字符串作为正则表达式处理。请重新阅读链接到的MDN JavaScript指南的开头部分。它解释说,要生成正则表达式,可以使用文字符号:
/ab+c/
,或者使用字符串参数调用RegExp的构造函数:
newregexp(“ab+c”)