-
-
Save marcelo-ribeiro/abd651b889e4a20e0bab558a05d38d77 to your computer and use it in GitHub Desktop.
// Example: https://codepen.io/marcelo-ribeiro/pen/OJmVOyW | |
const accentsMap = new Map([ | |
["A", "Á|À|Ã|Â|Ä"], | |
["a", "á|à|ã|â|ä"], | |
["E", "É|È|Ê|Ë"], | |
["e", "é|è|ê|ë"], | |
["I", "Í|Ì|Î|Ï"], | |
["i", "í|ì|î|ï"], | |
["O", "Ó|Ò|Ô|Õ|Ö"], | |
["o", "ó|ò|ô|õ|ö"], | |
["U", "Ú|Ù|Û|Ü"], | |
["u", "ú|ù|û|ü"], | |
["C", "Ç"], | |
["c", "ç"], | |
["N", "Ñ"], | |
["n", "ñ"] | |
]); | |
const reducer = (acc, [key]) => acc.replace(new RegExp(accentsMap.get(key), "g"), key); | |
export const removeAccents = (text) => [...accentsMap].reduce(reducer, text); |
export const slugify = text => text | |
.replace(/\s|_|\(|\)/g, "-") | |
.normalize("NFD").replace(/\p{Diacritic}/gu, "") | |
.toLowerCase() |
// Example: https://codepen.io/marcelo-ribeiro/pen/PomqOvE | |
const accentsMap = new Map([ | |
["-", "\\s|\\.|_"], | |
["a", "á|à|ã|â|ä"], | |
["e", "é|è|ê|ë"], | |
["i", "í|ì|î|ï"], | |
["o", "ó|ò|ô|õ|ö"], | |
["u", "ú|ù|û|ü"], | |
["c", "ç"], | |
["n", "ñ"] | |
]); | |
const reducer = (acc, [key]) => acc.replace(new RegExp(accentsMap.get(key), "gi"), key); | |
export const slugify = (text) => [...accentsMap].reduce(reducer, text.toLowerCase()); |
export const removeAccents = text => text.normalize("NFD").replace(/\p{Diacritic}/gu, "") |
Amazing ! thank you
Great! I'm using it in a Isotope sorting function and works like a charm. Thanks!
Just writing another review for this code: it works like a charm! Not sure about performance, but it is working well! Thanks for posting this!
God!!
It's beautiful
valeu, lindão!
Naisu!
Thanks a lot for this snippet.
I improved for ES6 use, in case anyone might want it:
const accentsMap = {
a: 'á|à|ã|â|À|Á|Ã|Â',
e: 'é|è|ê|É|È|Ê',
i: 'í|ì|î|Í|Ì|Î',
o: 'ó|ò|ô|õ|Ó|Ò|Ô|Õ',
u: 'ú|ù|û|ü|Ú|Ù|Û|Ü',
c: 'ç|Ç',
n: 'ñ|Ñ',
};
export const slugify = text => Object.keys(accentsMap).reduce((acc, cur) => acc.replace(new RegExp(accentsMap[cur], 'g'), cur), text);
Valeu por compartilhar!
Thanks a lot!
salvou meu dia!
Thank you for sharing. Note that ä,Ä,ë,Ë,ï,Ï,ö,Ö are missing in the map.
I have modified the last code, that I find really nice, to remove all none alpha-numeric values. In names and firstname you often have characters such as '(', ')' and other character types. I needed this to make a filter search of similar names and firstname in a database for subscription. It makes t easuer to compasre with other names in the database:
const accentsMap = {
a: 'á|à|ã|â|À|Á|Ã|Â',
e: 'é|è|ê|É|È|Ê',
i: 'í|ì|î|Í|Ì|Î',
o: 'ó|ò|ô|õ|Ó|Ò|Ô|Õ',
u: 'ú|ù|û|ü|Ú|Ù|Û|Ü',
c: 'ç|Ç',
n: 'ñ|Ñ'
}
const strEpuree = str => Object.keys(accentsMap).reduce((acc, cur) => acc.replace(new RegExp(accentsMap[cur], 'g'), cur), str.replaceAll('[^a-zA-Z0-9]', ''))
Thank you for sharing. Note that ä,Ä,ë,Ë,ï,Ï,ö,Ö are missing in the map.
🤙🏻
Maybe you should check this out! :) Remove accents/diacritics in a string in JavaScript
Love it thank you so much <3
Excellent work Marcelo, thanks you for sharing.
It didn't replace whitespace well, so I mixed the two lines together and it works like a charm.
``
const slugify = str => {
const map = {
'-' : ' |_',
'a' : 'á|à|ã|â|ä|À|Á|Ã|Â|Ä',
'e' : 'é|è|ê|ë|É|È|Ê|Ë',
'i' : 'í|ì|î|ï|Í|Ì|Î|Ï',
'o' : 'ó|ò|ô|õ|ö|Ó|Ò|Ô|Õ|Ö',
'u' : 'ú|ù|û|ü|Ú|Ù|Û|Ü',
'c' : 'ç|Ç',
'n' : 'ñ|Ñ'
};
for (var pattern in map) {
str = str.replace(new RegExp(map[pattern], 'g'), pattern);
}
return str;
}
``
Thanks @marcelo,
I found this interesting topic on the stackoverflow using String.prototype.normalize()
const accentsMap = { a: 'á|à|ã|â|À|Á|Ã|Â', e: 'é|è|ê|É|È|Ê', i: 'í|ì|î|Í|Ì|Î', o: 'ó|ò|ô|õ|Ó|Ò|Ô|Õ', u: 'ú|ù|û|ü|Ú|Ù|Û|Ü', c: 'ç|Ç', n: 'ñ|Ñ', }; export const slugify = text => Object.keys(accentsMap).reduce((acc, cur) => acc.replace(new RegExp(accentsMap[cur], 'g'), cur), text);
thanks! and thanks to the author @marcelo-ribeiro
New ES6 version! 😎
Thanks a lot for this snippet.
I improved for ES6 use, in case anyone might want it:const accentsMap = { a: 'á|à|ã|â|À|Á|Ã|Â', e: 'é|è|ê|É|È|Ê', i: 'í|ì|î|Í|Ì|Î', o: 'ó|ò|ô|õ|Ó|Ò|Ô|Õ', u: 'ú|ù|û|ü|Ú|Ù|Û|Ü', c: 'ç|Ç', n: 'ñ|Ñ', }; export const slugify = text => Object.keys(accentsMap).reduce((acc, cur) => acc.replace(new RegExp(accentsMap[cur], 'g'), cur), text);
Thank you for sharing! I used part of the your code to improve the ES6 version.
I hope you enjoy 😃
Thank you !