Make jquery: Contains accent, insensitive

I have this inconspicuous user selector:

jQuery.expr[':'].Contains = function(a,i,m) { var text = jQuery(a).text().toUpperCase(); var words = m[3].split(/\s+/); for(var i = 0; i < words.length; i++) { if (-1 == text.indexOf(words[i].toUpperCase())) { return false; } } return true; }; 

It works great, but it messed up with accents. My question, therefore, is simple, how can I make this selector , both without an accent ?

I thought of using a regex character map, but I can't get it to work correctly.

Thank you for your help.

+4
source share
2 answers

I found this on Github, it works great for me: https://gist.github.com/oziks/3664787

 jQuery.expr[':'].contains = function(a, i, m) { var rExps=[ {re: /[\xC0-\xC6]/g, ch: "A"}, {re: /[\xE0-\xE6]/g, ch: "a"}, {re: /[\xC8-\xCB]/g, ch: "E"}, {re: /[\xE8-\xEB]/g, ch: "e"}, {re: /[\xCC-\xCF]/g, ch: "I"}, {re: /[\xEC-\xEF]/g, ch: "i"}, {re: /[\xD2-\xD6]/g, ch: "O"}, {re: /[\xF2-\xF6]/g, ch: "o"}, {re: /[\xD9-\xDC]/g, ch: "U"}, {re: /[\xF9-\xFC]/g, ch: "u"}, {re: /[\xC7-\xE7]/g, ch: "c"}, {re: /[\xD1]/g, ch: "N"}, {re: /[\xF1]/g, ch: "n"} ]; var element = $(a).text(); var search = m[3]; $.each(rExps, function() { element = element.replace(this.re, this.ch); search = search.replace(this.re, this.ch); }); return element.toUpperCase() .indexOf(search.toUpperCase()) >= 0; }; 
+3
source

Instead of using string.indexOf (), use string.match () with a parameter that is not sensitive to the regular expression.

Sort of:

 if (!text.match(new RegExp(words[i],'i'))){ return false; } 

Comparison RegExp takes into account Unicode characters, so the accents will match correctly between upper and lower case.

0
source

All Articles