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',
ḁ: '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',
ƃ: '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',
ꜿ: 'c',
Ꜿ: 'c',
d: 'd',
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',
Ǝ: 'E',
ⱻ: 'E',
ə: 'a',
Ə: 'A',
ₔ: 'a',
ᶕ: 'a',
ɛ: 'e',
Ɛ: 'E',
ᶓ: 'e',
ɘ: 'e',
ɚ: 'a',
ɜ: 'e',
ᶔ: 'e',
ᴈ: 'e',
ɝ: 'e',
ɞ: 'e',
ʚ: 'e',
f: 'f',
F: 'F',
ḟ: 'f',
Ḟ: 'F',
ꝼ: 'f',
Ꝼ: 'F',
ff: 'ff',
ffi: 'ffi',
ffl: 'ffl',
fi: 'fi',
fl: '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',
ꝿ: 'g',
Ꝿ: 'G',
h: 'h',
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',
ḭ: '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',
ɟ: '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',
Ꝅ: 'K',
ʞ: 'k',
l: 'l',
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',
ꟽ: 'M',
ꟿ: 'M',
n: 'n',
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',
ộ: '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',
Ꝕ: 'P',
ꟼ: 'p',
q: 'q',
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',
ɿ: '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',
ꞅ: 'S',
Ꞅ: 's',
ß: 'ss',
ẞ: 'SS',
st: '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',
Ṯ: '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',
Ṵ: 'U',
ᴜ: 'U',
ᵫ: 'ue',
ʉ: 'u',
Ʉ: 'U',
ᵾ: 'U',
ᶙ: 'u',
ɥ: 'h',
ʮ: 'h',
ʯ: 'h',
ɯ: 'm',
Ɯ: 'M',
ɰ: 'm',
v: 'v',
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',
Ⱳ: 'W',
ʍ: 'w',
x: 'x',
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',
ỿ: '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',
ꝣ: '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