Skip to content

Instantly share code, notes, and snippets.

@eek
Last active August 4, 2021 14:23
Show Gist options
  • Save eek/9c4887e80b3ede05c0e39fee4dce3747 to your computer and use it in GitHub Desktop.
Save eek/9c4887e80b3ede05c0e39fee4dce3747 to your computer and use it in GitHub Desktop.
Vanilla JavaScript Slugify + Accent removal - Just another JavaScript Slugifier with an extra line for Accent Removal
function slugify(text) {
return text.toString().toLowerCase().trim()
.normalize('NFD') // separate accent from letter
.replace(/[\u0300-\u036f]/g, '') // remove all separated accents
.replace(/\s+/g, '-') // replace spaces with -
.replace(/&/g, '-and-') // replace & with 'and'
.replace(/[^\w\-]+/g, '') // remove all non-word chars
.replace(/--+/g, '-') // replace multiple '-' with single '-'
}
@eek
Copy link
Author

eek commented Aug 4, 2021

NFD takes care of all diacritics. So anything that's above or below the character.

It doesn't modify the actual component of the word. So Äpfel has the diacritic removed and becomes Apfel. Türkçe becomes Turkce. It doesn't change ä to ae it just removes the diacritics that are above and below the character. I've used it mainly for French and Romanian to generate URLs from Titles. Places where the written word without diacritics is exactly the same: mămăligă is written mamaliga.

So yeah ß doesn't get converted to anything because it doesn't have any upper or lower accents.

@rowild
Copy link

rowild commented Aug 4, 2021

Finally it made click and I believe to understand, what NFD does! Thank you very much for your efforts, @eek ! :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment