diff options
| author | Jacob Thornton <[email protected]> | 2012-03-19 15:33:28 -0700 |
|---|---|---|
| committer | Jacob Thornton <[email protected]> | 2012-03-19 15:33:28 -0700 |
| commit | 83a7a698939b5b4cba3c04a86befc12b9005df3d (patch) | |
| tree | b2251b8f03b1de86970ba66be05f63b572cc5118 | |
| parent | bf59220b87a3b5960381f500dbc6a310a8aef60b (diff) | |
| download | bootstrap-83a7a698939b5b4cba3c04a86befc12b9005df3d.tar.xz bootstrap-83a7a698939b5b4cba3c04a86befc12b9005df3d.zip | |
typeahead should escape regexp special chars
| -rw-r--r-- | js/bootstrap-typeahead.js | 3 | ||||
| -rw-r--r-- | js/tests/unit/bootstrap-typeahead.js | 16 |
2 files changed, 18 insertions, 1 deletions
diff --git a/js/bootstrap-typeahead.js b/js/bootstrap-typeahead.js index dc2f88221..804e60dc4 100644 --- a/js/bootstrap-typeahead.js +++ b/js/bootstrap-typeahead.js @@ -109,7 +109,8 @@ } , highlighter: function (item) { - return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) { + var query = this.query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') + return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { return '<strong>' + match + '</strong>' }) } diff --git a/js/tests/unit/bootstrap-typeahead.js b/js/tests/unit/bootstrap-typeahead.js index 96ea7c45f..25d313c85 100644 --- a/js/tests/unit/bootstrap-typeahead.js +++ b/js/tests/unit/bootstrap-typeahead.js @@ -52,6 +52,22 @@ $(function () { typeahead.$menu.remove() }) + test("should not explode when regex chars are entered", function () { + var $input = $('<input />').typeahead({ + source: ['aa', 'ab', 'ac', 'mdo*', 'fat+'] + }) + , typeahead = $input.data('typeahead') + + $input.val('+') + typeahead.lookup() + + ok(typeahead.$menu.is(":visible"), 'typeahead is visible') + equals(typeahead.$menu.find('li').length, 1, 'has 1 item in menu') + equals(typeahead.$menu.find('.active').length, 1, 'one item is active') + + typeahead.$menu.remove() + }) + test("should hide menu when query entered", function () { stop() var $input = $('<input />').typeahead({ |
