1

I need to treat accented characters as if they were the same as their non accented counterparts. This is my code:

var re = new RegExp(string, 'i');
if(target.search(re) == 0) { }

It currently ignores the character's case, how do I also ignore if the character is accented or not?

lisovaccaro
  • 32,502
  • 98
  • 258
  • 410
  • 3
    Try removing the accents from the string first and then passing a regex. http://stackoverflow.com/questions/990904/javascript-remove-accents-in-strings. In any case that should work. This question or similar has been asked many times. – elclanrs Jun 20 '12 at 08:23

2 Answers2

5

I think you have to remove the accents first then do your RegExp.
You can use this function taht I found here :

function stripVowelAccent(str)
{
 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:/[\xD1]/g, ch:'N'},
 {re:/[\xF1]/g, ch:'n'} ];

 for(var i=0, len=rExps.length; i<len; i++)
  str=str.replace(rExps[i].re, rExps[i].ch);

 return str;
}
jbrtrnd
  • 3,815
  • 5
  • 23
  • 41
  • This is a weak solution that fails with many accented characters you might not expect. See [remove accents in strings](http://stackoverflow.com/questions/990904/javascript-remove-accents-in-strings) for how to properly handle accents. – Dan Dascalescu May 13 '14 at 01:52
3

uses the library semplice

http://semplicewebsites.com/removing-accents-javascript

var latin_map = {
  'Á': 'A', // LATIN CAPITAL LETTER A WITH ACUTE
  'Ă': 'A', // LATIN CAPITAL LETTER A WITH BREVE
...
  'ᵥ': 'v', // LATIN SUBSCRIPT SMALL LETTER V
  'ₓ': 'x', // LATIN SUBSCRIPT SMALL LETTER X
};


String.prototype.latinise = function() {
   return this.replace(/[^A-Za-z0-9]/g, function(x) { return latin_map[x] || x; })
};
Mark Pro Campos
  • 334
  • 2
  • 3