aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Thornton <[email protected]>2012-03-19 15:33:28 -0700
committerJacob Thornton <[email protected]>2012-03-19 15:33:28 -0700
commit83a7a698939b5b4cba3c04a86befc12b9005df3d (patch)
treeb2251b8f03b1de86970ba66be05f63b572cc5118
parentbf59220b87a3b5960381f500dbc6a310a8aef60b (diff)
downloadbootstrap-83a7a698939b5b4cba3c04a86befc12b9005df3d.tar.xz
bootstrap-83a7a698939b5b4cba3c04a86befc12b9005df3d.zip
typeahead should escape regexp special chars
-rw-r--r--js/bootstrap-typeahead.js3
-rw-r--r--js/tests/unit/bootstrap-typeahead.js16
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({