diff --git a/lib/OpenLayers/Filter/Comparison.js b/lib/OpenLayers/Filter/Comparison.js index 04f41a2f55..0b9e4a673a 100644 --- a/lib/OpenLayers/Filter/Comparison.js +++ b/lib/OpenLayers/Filter/Comparison.js @@ -137,13 +137,14 @@ OpenLayers.Filter.Comparison = OpenLayers.Class(OpenLayers.Filter, { return null; } + // set UMN MapServer defaults for unspecified parameters wildCard = wildCard ? wildCard : "*"; singleChar = singleChar ? singleChar : "."; escapeChar = escapeChar ? escapeChar : "!"; this.value = this.value.replace( - new RegExp("\\"+escapeChar, "g"), "\\"); + new RegExp("\\"+escapeChar+"(.|$)", "g"), "\\$1") this.value = this.value.replace( new RegExp("\\"+singleChar, "g"), "."); this.value = this.value.replace( diff --git a/tests/Filter/Comparison.html b/tests/Filter/Comparison.html index 5275ff4a7e..03e6cd4d9e 100644 --- a/tests/Filter/Comparison.html +++ b/tests/Filter/Comparison.html @@ -23,7 +23,7 @@ } function test_Comparison_value2regex(t) { - t.plan(2); + t.plan(4); var filter = new OpenLayers.Filter.Comparison({ property: "foo", @@ -35,6 +35,15 @@ filter.value = "%b.r!%!.%"; filter.value2regex("%", ".", "!"); t.eq(filter.value, ".*b.r\\%\\..*", "Regular expression with different wildcard and escape chars generated correctly."); + + filter.value = "!!"; + filter.value2regex(); + t.eq(filter.value, "\\!", "!! successfully unescaped to \\!"); + + // Big one. + filter.value = "!!c!!!d!e"; + filter.value2regex(); + t.eq(filter.value, "\\!c\\!\\d\\e", "!!c!!!d!e successfully unescaped to \\!c\\!\\d\\e"); } function test_regex2value(t) {