Problem with Regular Expression Characters in Filter Values
I had a problem where parentheses appearing in filter text strings seemed to be ignored for filtering purposes. I discovered that they were being interpreted as regular expression grouping characters. After escaping the filter strings, they worked as expected.
Here's the code I modified inside the FilterBar.applyFilters() function:
Code:
case 'like' :
var escapedNewVal;
if (Ext.isArray(newVal)) {
escapedNewVal = newVal.map(Ext.String.escapeRegex);
} else {
escapedNewVal = Ext.String.escapeRegex(newVal);
}
filterFn = function(item) {
var re = new RegExp(escapedNewVal, 'i');
return re.test(item.get(column.dataIndex));
};
break;
case 'in' :
var escapedNewVal;
if (Ext.isArray(newVal)) {
escapedNewVal = newVal.map(Ext.String.escapeRegex);
} else {
escapedNewVal = Ext.String.escapeRegex(newVal);
}
filterFn = function(item) {
var re = new RegExp('^' + escapedNewVal.join('|')
+ '$', 'i');
return re.test((Ext.isEmpty(item
.get(column.dataIndex))
? me.autoStoresNullValue
: item.get(column.dataIndex)));
};
break;