Skip to content

Instantly share code, notes, and snippets.

@armanozak
Created October 7, 2020 08:50
Show Gist options
  • Save armanozak/e981448a228c5cdd91476954f28fee66 to your computer and use it in GitHub Desktop.
Save armanozak/e981448a228c5cdd91476954f28fee66 to your computer and use it in GitHub Desktop.
[Normalize Diacritics] Convert diacritics to Latin-1 (ISO/IEC 8859-1) #tip #javascript
const diacriticsMap = {
: 'a',
: 'A',
: 'a',
á: 'a',
Á: 'A',
à: 'a',
À: 'A',
ă: 'a',
Ă: 'A',
: 'a',
: 'A',
: 'a',
: 'A',
: 'a',
: 'A',
: 'a',
: 'A',
â: 'a',
Â: 'A',
: 'a',
: 'A',
: 'a',
: 'A',
: 'a',
: 'A',
: 'a',
: 'A',
ǎ: 'a',
Ǎ: 'A',
å: 'a',
Å: 'A',
ǻ: 'a',
Ǻ: 'A',
ä: 'a',
Ä: 'A',
ǟ: 'a',
Ǟ: 'A',
ã: 'a',
Ã: 'A',
ȧ: 'a',
Ȧ: 'A',
ǡ: 'a',
Ǡ: 'A',
ą: 'a',
Ą: 'A',
ā: 'a',
Ā: 'A',
: 'a',
: 'A',
ȁ: 'a',
Ȁ: 'A',
ȃ: 'a',
Ȃ: 'A',
: 'a',
: 'A',
: 'a',
: 'A',
: 'a',
: 'A',
: 'a',
: 'A',
: 'aa',
: 'AA',
æ: 'ae',
Æ: 'AE',
ǽ: 'ae',
Ǽ: 'AE',
ǣ: 'ae',
Ǣ: 'AE',
: 'ao',
: 'AO',
: 'au',
: 'AU',
: 'av',
: 'AV',
: 'av',
: 'AV',
: 'ay',
: 'AY',
: 'a',
: 'A',
: 'a',
Ⱥ: 'A',
: 'a',
: 'AE',
: 'ae',
ɐ: 'a',
: 'a',
: 'b',
: 'B',
: 'b',
: 'B',
: 'b',
: 'B',
: 'b',
: 'B',
ʙ: 'B',
ƀ: 'b',
Ƀ: 'B',
: 'B',
: 'b',
: 'b',
ɓ: 'b',
Ɓ: 'B',
ƃ: 'b',
Ƃ: 'B',
: 'c',
: 'C',
ć: 'c',
Ć: 'C',
ĉ: 'c',
Ĉ: 'C',
č: 'c',
Č: 'C',
ċ: 'c',
Ċ: 'C',
ç: 'c',
Ç: 'C',
: 'c',
: 'C',
: 'C',
ȼ: 'c',
Ȼ: 'C',
ƈ: 'c',
Ƈ: 'C',
ɕ: 'c',
: 'c',
: 'c',
: 'c',
: 'd',
: 'D',
ď: 'd',
Ď: 'D',
: 'd',
: 'D',
: 'd',
: 'D',
đ: 'd',
Đ: 'D',
: 'd',
: 'D',
: 'd',
: 'D',
: 'd',
: 'D',
ð: 'd',
Ð: 'D',
: 'd',
: 'D',
ȸ: 'db',
dz: 'dz',
ʣ: 'dz',
Dz: 'Dz',
DZ: 'DZ',
dž: 'dz',
Dž: 'Dz',
DŽ: 'DZ',
ʥ: 'dz',
: 'D',
: 'D',
: 'd',
: 'd',
ɖ: 'd',
Ɖ: 'D',
ɗ: 'd',
Ɗ: 'D',
: 'd',
ƌ: 'd',
Ƌ: 'D',
ȡ: 'd',
: 'e',
: 'E',
: 'e',
é: 'e',
É: 'E',
è: 'e',
È: 'E',
ĕ: 'e',
Ĕ: 'E',
ê: 'e',
Ê: 'E',
ế: 'e',
: 'E',
: 'e',
: 'E',
: 'e',
: 'E',
: 'e',
: 'E',
ě: 'e',
Ě: 'E',
ë: 'e',
Ë: 'E',
: 'e',
: 'E',
ė: 'e',
Ė: 'E',
ȩ: 'e',
Ȩ: 'E',
: 'e',
: 'E',
ę: 'e',
Ę: 'E',
ē: 'e',
Ē: 'E',
: 'e',
: 'E',
: 'e',
: 'E',
: 'e',
: 'E',
ȅ: 'e',
Ȅ: 'E',
ȇ: 'e',
Ȇ: 'E',
: 'e',
: 'E',
: 'e',
: 'E',
: 'e',
: 'E',
: 'e',
: 'E',
: 'E',
ɇ: 'e',
Ɇ: 'E',
: 'e',
: 'e',
ǝ: 'e',
Ǝ: 'E',
: 'E',
ə: 'a',
Ə: 'A',
: 'a',
: 'a',
ɛ: 'e',
Ɛ: 'E',
: 'e',
ɘ: 'e',
ɚ: 'a',
ɜ: 'e',
: 'e',
: 'e',
ɝ: 'e',
ɞ: 'e',
ʚ: 'e',
: 'f',
: 'F',
: 'f',
: 'F',
: 'f',
: 'F',
: 'ff',
: 'ffi',
: 'ffl',
: 'fi',
: 'fl',
: 'F',
: 'f',
: 'f',
ƒ: 'f',
Ƒ: 'F',
: 'F',
: 'g',
: 'G',
ǵ: 'g',
Ǵ: 'G',
ğ: 'g',
Ğ: 'G',
ĝ: 'g',
Ĝ: 'G',
ǧ: 'G',
Ǧ: 'G',
ġ: 'g',
Ġ: 'G',
ģ: 'g',
Ģ: 'G',
: 'g',
: 'G',
: 'g',
: 'G',
ɡ: 'g',
ɢ: 'G',
ǥ: 'G',
Ǥ: 'G',
: 'g',
ɠ: 'g',
Ɠ: 'G',
ʛ: 'G',
: 'g',
: 'g',
: 'G',
: 'h',
: 'H',
ĥ: 'h',
Ĥ: 'H',
ȟ: 'h',
Ȟ: 'H',
: 'h',
: 'H',
: 'h',
: 'H',
: 'h',
: 'H',
ħ: 'h',
Ħ: 'H',
: 'h',
: 'H',
: 'h',
: 'H',
: 'h',
ʜ: 'H',
ƕ: 'hv',
Ƕ: 'HV',
ɦ: 'h',
: 'h',
: 'H',
: 'h',
: 'H',
: 'i',
: 'I',
: 'i',
: 'i',
í: 'i',
Í: 'I',
ì: 'i',
Ì: 'I',
ĭ: 'i',
Ĭ: 'I',
î: 'i',
Î: 'I',
ǐ: 'i',
Ǐ: 'I',
ï: 'i',
Ï: 'I',
: 'i',
: 'I',
ĩ: 'i',
Ĩ: 'I',
İ: 'I',
į: 'i',
Į: 'I',
ī: 'i',
Ī: 'I',
: 'i',
: 'I',
ȉ: 'i',
Ȉ: 'I',
ȋ: 'i',
Ȋ: 'I',
: 'i',
: 'I',
: 'i',
: 'I',
ij: 'ij',
IJ: 'IJ',
ı: 'i',
ɪ: 'I',
: 'I',
: 'i',
ɨ: 'i',
Ɨ: 'I',
: 'I',
: 'i',
Ɩ: 'I',
: 'i',
: 'j',
: 'J',
: 'j',
ĵ: 'j',
Ĵ: 'J',
ǰ: 'j',
ȷ: 'j',
: 'J',
ɉ: 'j',
Ɉ: 'J',
ʝ: 'j',
ɟ: 'j',
ʄ: 'j',
: 'k',
: 'K',
: 'k',
: 'K',
ǩ: 'k',
Ǩ: 'K',
ķ: 'k',
Ķ: 'K',
: 'k',
: 'K',
: 'k',
: 'K',
: 'K',
: 'k',
ƙ: 'k',
Ƙ: 'K',
: 'k',
: 'K',
: 'k',
: 'K',
: 'k',
: 'K',
: 'k',
: 'K',
ʞ: 'k',
: 'l',
: 'L',
ĺ: 'l',
Ĺ: 'L',
ľ: 'l',
Ľ: 'L',
ļ: 'l',
Ļ: 'L',
ł: 'l',
Ł: 'L',
: 'l',
: 'L',
: 'l',
: 'L',
: 'l',
: 'L',
: 'l',
: 'L',
ŀ: 'l',
Ŀ: 'L',
lj: 'lj',
Lj: 'Lj',
LJ: 'LJ',
: 'll',
: 'LL',
ʪ: 'ls',
ʫ: 'lz',
ʟ: 'L',
: 'l',
: 'L',
: 'L',
: 'l',
: 'L',
ƚ: 'l',
Ƚ: 'L',
: 'l',
: 'L',
ɫ: 'l',
: 'L',
ɬ: 'l',
: 'l',
ɭ: 'l',
ȴ: 'l',
: 'l',
: 'L',
ʎ: 'y',
: 'm',
: 'M',
ḿ: 'm',
: 'M',
: 'm',
: 'M',
: 'm',
: 'M',
: 'M',
: 'm',
: 'm',
ɱ: 'm',
: 'M',
: 'M',
: 'M',
: 'n',
: 'N',
: 'n',
ń: 'n',
Ń: 'N',
ǹ: 'n',
Ǹ: 'N',
ň: 'n',
Ň: 'N',
ñ: 'n',
Ñ: 'N',
: 'n',
: 'N',
ņ: 'n',
Ņ: 'N',
: 'n',
: 'N',
: 'n',
: 'N',
: 'n',
: 'N',
nj: 'nj',
Nj: 'Nj',
NJ: 'NJ',
ɴ: 'N',
: 'N',
: 'n',
ɲ: 'n',
Ɲ: 'N',
ƞ: 'n',
Ƞ: 'N',
: 'n',
ɳ: 'n',
ȵ: 'n',
ŋ: 'n',
Ŋ: 'N',
: 'o',
: 'O',
: 'o',
ó: 'o',
Ó: 'O',
ò: 'o',
Ò: 'O',
ŏ: 'o',
Ŏ: 'O',
ô: 'o',
Ô: 'O',
: 'o',
: 'O',
: 'o',
: 'O',
: 'o',
: 'O',
: 'o',
: 'O',
ǒ: 'o',
Ǒ: 'O',
ö: 'o',
Ö: 'O',
ȫ: 'o',
Ȫ: 'O',
ő: 'o',
Ő: 'O',
õ: 'o',
Õ: 'O',
: 'o',
: 'O',
: 'o',
: 'O',
ȭ: 'o',
Ȭ: 'O',
ȯ: 'o',
Ȯ: 'O',
ȱ: 'o',
Ȱ: 'O',
ø: 'o',
Ø: 'O',
ǿ: 'o',
Ǿ: 'O',
ǫ: 'o',
Ǫ: 'O',
ǭ: 'o',
Ǭ: 'O',
ō: 'o',
Ō: 'O',
: 'o',
: 'O',
: 'o',
: 'O',
: 'o',
: 'O',
ȍ: 'o',
Ȍ: 'O',
ȏ: 'o',
Ȏ: 'O',
ơ: 'o',
Ơ: 'O',
: 'o',
: 'O',
: 'o',
: 'O',
: 'o',
: 'O',
: 'o',
: 'O',
: 'o',
: 'O',
: 'o',
: 'O',
: 'o',
: 'O',
œ: 'oe',
Œ: 'OE',
: 'oo',
: 'OO',
: 'O',
ɶ: 'OE',
: 'oe',
ɔ: 'o',
Ɔ: 'O',
: 'O',
: 'o',
: 'o',
: 'O',
: 'o',
: 'o',
: 'o',
ɵ: 'o',
Ɵ: 'O',
: 'o',
: 'O',
ȣ: 'ou',
Ȣ: 'OU',
: 'OU',
: 'p',
: 'P',
: 'p',
: 'P',
: 'p',
: 'P',
: 'P',
: 'p',
: 'P',
: 'p',
: 'P',
: 'p',
: 'p',
ƥ: 'p',
Ƥ: 'P',
: 'p',
: 'P',
: 'p',
: 'P',
: 'p',
: 'q',
: 'Q',
ȹ: 'qp',
: 'q',
: 'Q',
: 'q',
: 'Q',
ʠ: 'q',
ɋ: 'q',
Ɋ: 'Q',
ĸ: 'q',
: 'r',
: 'R',
: 'r',
ŕ: 'r',
Ŕ: 'R',
ř: 'r',
Ř: 'R',
: 'r',
: 'R',
ŗ: 'r',
Ŗ: 'R',
ȑ: 'r',
Ȑ: 'R',
ȓ: 'r',
Ȓ: 'R',
: 'r',
: 'R',
: 'r',
: 'R',
: 'r',
: 'R',
: 'r',
: 'R',
ʀ: 'R',
: 'r',
: 'R',
: 'R',
ɍ: 'r',
Ɍ: 'R',
: 'r',
: 'R',
: 'r',
ɼ: 'r',
ɽ: 'r',
: 'R',
ɾ: 'r',
: 'r',
ɿ: 'r',
ʁ: 'R',
: 'f',
: 's',
: 'S',
ś: 's',
Ś: 'S',
: 's',
: 'S',
ŝ: 's',
Ŝ: 'S',
š: 's',
Š: 'S',
: 's',
: 'S',
: 's',
: 'S',
ş: 's',
Ş: 'S',
: 's',
: 'S',
: 's',
: 'S',
ș: 's',
Ș: 'S',
ſ: 's',
: 'S',
: 's',
ß: 'ss',
: 'SS',
: 'st',
: 'S',
: 's',
: 's',
ʂ: 's',
ȿ: 's',
: 's',
: 's',
: 't',
: 'T',
ť: 't',
Ť: 'T',
: 't',
: 't',
: 'T',
ţ: 't',
Ţ: 'T',
: 't',
: 'T',
ț: 't',
Ț: 'T',
: 't',
: 'T',
: 't',
: 'T',
: 'T',
ʨ: 'tc',
: 'th',
ʦ: 'ts',
: 'tz',
: 'TZ',
: 'T',
ŧ: 't',
Ŧ: 'T',
: 't',
Ⱦ: 'T',
: 't',
ƫ: 't',
ƭ: 't',
Ƭ: 'T',
ʈ: 't',
Ʈ: 'T',
ȶ: 't',
ʇ: 't',
: 'u',
: 'U',
: 'u',
ú: 'u',
Ú: 'U',
ù: 'u',
Ù: 'U',
ŭ: 'u',
Ŭ: 'U',
û: 'u',
Û: 'U',
ǔ: 'u',
Ǔ: 'U',
ů: 'u',
Ů: 'U',
ü: 'u',
Ü: 'U',
ǘ: 'u',
Ǘ: 'U',
ǜ: 'u',
Ǜ: 'U',
ǚ: 'u',
Ǚ: 'U',
ǖ: 'u',
Ǖ: 'U',
ű: 'u',
Ű: 'U',
ũ: 'u',
Ũ: 'U',
: 'u',
: 'U',
ų: 'u',
Ų: 'U',
ū: 'u',
Ū: 'U',
: 'u',
: 'U',
: 'u',
: 'U',
ȕ: 'u',
Ȕ: 'U',
ȗ: 'u',
Ȗ: 'U',
ư: 'u',
Ư: 'U',
: 'u',
: 'U',
: 'u',
: 'U',
: 'u',
: 'U',
: 'u',
: 'U',
: 'u',
: 'U',
: 'u',
: 'U',
: 'u',
: 'U',
: 'u',
: 'U',
: 'u',
: 'U',
: 'U',
: 'ue',
ʉ: 'u',
Ʉ: 'U',
: 'U',
: 'u',
ɥ: 'h',
ʮ: 'h',
ʯ: 'h',
ɯ: 'm',
Ɯ: 'M',
ɰ: 'm',
: 'v',
: 'V',
: 'v',
: 'v',
: 'V',
ṿ: 'v',
: 'V',
: 'vy',
: 'VY',
: 'V',
: 'v',
: 'V',
: 'v',
ʋ: 'v',
Ʋ: 'V',
: 'v',
: 'v',
: 'V',
ʌ: 'v',
Ʌ: 'V',
: 'w',
: 'W',
: 'w',
: 'W',
: 'w',
: 'W',
ŵ: 'w',
Ŵ: 'W',
: 'w',
: 'w',
: 'W',
: 'w',
: 'W',
: 'w',
: 'W',
: 'W',
: 'w',
: 'W',
ʍ: 'w',
: 'x',
: 'X',
: 'x',
: 'x',
: 'X',
: 'x',
: 'X',
: 'x',
: 'y',
: 'Y',
ý: 'y',
Ý: 'Y',
: 'y',
: 'Y',
ŷ: 'y',
Ŷ: 'Y',
: 'y',
ÿ: 'y',
Ÿ: 'Y',
: 'y',
: 'Y',
: 'y',
: 'Y',
ȳ: 'y',
Ȳ: 'Y',
: 'y',
: 'Y',
: 'y',
: 'Y',
ʏ: 'Y',
ɏ: 'y',
Ɏ: 'Y',
ƴ: 'y',
Ƴ: 'Y',
ỿ: 'y',
: 'Y',
ȝ: 'z',
Ȝ: 'Z',
: 'z',
: 'Z',
ź: 'z',
Ź: 'Z',
: 'z',
: 'Z',
ž: 'z',
Ž: 'Z',
ż: 'z',
Ż: 'Z',
: 'z',
: 'Z',
: 'z',
: 'Z',
: 'Z',
ƶ: 'z',
Ƶ: 'Z',
: 'z',
: 'z',
ȥ: 'z',
Ȥ: 'Z',
ʐ: 'z',
ʑ: 'z',
ɀ: 'z',
: 'z',
: 'Z',
: 'z',
: 'Z',
þ: 'th',
Þ: 'TH',
: 'th',
: 'TH',
ƿ: 'w',
Ƿ: 'W',
: 'V',
ʼn: 'n',
ʗ: 'C',
};
const diacriticsRegex = new RegExp(Object.keys(diacriticsMap).join('|'), 'g');
export function normalizeDiacritics(text) {
return text ? text.replace(diacriticsRegex, match => CHARMAP[match]) : '';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment