0

我在为搜索面板制作 regExp 时遇到问题

&& (item.get('prodAddDate') >= dateStartValue.format("Y-m-d"))
&& (item.get('prodAddDate') <= dateEndValue.format("Y-m-d"));

我不确定这是否是 refExp 的任务,但没有其他想法

问题是,当我不填写日期字段时,我无法使用其他条件过滤数据

我正在尝试这样的事情,但不工作

    && ((item.get('prodAddDate') >= dateStartValue.format("Y-m-d")) || (new RegExp(dateStartValue)).test(item.get('prodAddDate'))) &&
 ((item.get('prodAddDate') <= dateEndValue.format("Y-m-d")) || (new RegExp(dateEndValue)).test(item.get('prodAddDate')));
4

1 回答 1

0

不完全确定您要做什么,但这里有一些信息,我希望可以帮助您解决问题。

比较运算符优先级

运算符的&&优先级高于||,这意味着:

A || B && C || D

相当于:

A || (B && C) || D

不:

(A || B) && (C || D)

日期比较

您可以直接比较Date对象:

// example data
var d1 = new Date('2012-12-12'),
    d2 = new Date('2012-12-12'),
    d3 = new Date('2013-01-01');

<并通过、><=和获得您期望的结果>=

// logical results
d1 < d3 // true
d1 < d2 // false
d2 > d3 // false
d1 <= d2 // true
d1 => d2 // true

但不是平等比较==

d1 == d2 // false
// yet...
d1 <= d2 && d1 => d2 // true

结论:要测试一个日期是在另一个日期之前还是之后,直接比较是可以的。但是,为了测试两个日期是否相同,请使用字符串比较:

// is this the same day?
d1.format('Y-m-d') === d2.format('Y-m-d') // true

// is this the same day and hour?
d1.format('Y-m-d H:i:s') === d2.format('Y-m-d H:i:s') // true

Ext.isEmpty()

Ext.isEmpty返回truenullundefined空字符串。''

Ext.isEmpty(null) // true
Ext.isEmpty(undefined) // true
Ext.isEmpty('') // true

Ext.isEmpty(' ') // false
Ext.isEmpty(false) // false
// etc.

这可能有助于解决您的空字段案例:

...
&& (Ext.isEmpty(item.get('prodAddDate') || item.get('prodAddDate') >= dateStartValue)
&& (Ext.isEmpty(item.get('prodAddDate') || item.get('prodAddDate') <= dateEndValue)

最后

对正则表达式的痴迷是什么?它们对于复杂的字符串测试/提取很有用,但仅此而已。你可能应该暂时忘记它们,伙计;p

于 2013-06-20T23:18:21.957 回答