Skip to content

Instantly share code, notes, and snippets.

@hagemann
Last active October 30, 2023 09:10
Star You must be signed in to star a gist
Save hagemann/382adfc57adbd5af078dc93feef01fe1 to your computer and use it in GitHub Desktop.
Slugify makes a string URI-friendly
function slugify(string) {
const a = 'àáâäæãåāăąçćčđďèéêëēėęěğǵḧîïíīįìıİłḿñńǹňôöòóœøōõőṕŕřßśšşșťțûüùúūǘůűųẃẍÿýžźż·/_,:;'
const b = 'aaaaaaaaaacccddeeeeeeeegghiiiiiiiilmnnnnoooooooooprrsssssttuuuuuuuuuwxyyzzz------'
const p = new RegExp(a.split('').join('|'), 'g')
return string.toString().toLowerCase()
.replace(/\s+/g, '-') // Replace spaces with -
.replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters
.replace(/&/g, '-and-') // Replace & with 'and'
.replace(/[^\w\-]+/g, '') // Remove all non-word characters
.replace(/\-\-+/g, '-') // Replace multiple - with single -
.replace(/^-+/, '') // Trim - from start of text
.replace(/-+$/, '') // Trim - from end of text
}
@KarllosSouza
Copy link

Thanks @KarllosSouza! While technically true, I would keep the original version because it will also discard dashes at the beginning or end: https://jsfiddle.net/mhagemann/7arg58o0/1/

Yeah... I didn't think of those cases.
Thanks for the answer!

@Doaa-Ahmed
Copy link

It would be nice if you can add these characters as well ā ē ī ō õ

@hagemann
Copy link
Author

@Doaa-Ahmed I’ve added these characters. Thanks for making this gist better!

@BayBreezy
Copy link

Thanks again!

@kenlas
Copy link

kenlas commented Oct 22, 2019

Thank you Matthias for this function!
Please note that it is missing the letter 'ő' from the hungarian alphabet.

@hagemann
Copy link
Author

@kenlas Very welcome, and thanks :) If other letters are missing, please let me know.

Copy link

ghost commented Nov 4, 2019

arabic

function slugify(string) {
const a = 'àáâäæãåāăąçćčđďèéêëēėęěğǵḧîïíīįìłḿñńǹňôöòóœøōõőṕŕřßśšşșťțûüùúūǘůűųẃẍÿýžźż·/_,:;'
const b = 'aaaaaaaaaacccddeeeeeeeegghiiiiiilmnnnnoooooooooprrsssssttuuuuuuuuuwxyyzzz------'
const p = new RegExp(a.split('').join('|'), 'g')

return string.toString().toLowerCase()
.replace(/\s+/g, '-') // Replace spaces with -
.replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters
.replace(/&/g, '-and-') // Replace & with 'and'
.replace(/[^[a-zA-Z0-9أ-ي]-]+/g, "") // Arabic support
.replace(/--+/g, '-') // Replace multiple - with single -
.replace(/^-+/, '') // Trim - from start of text
.replace(/-+$/, '') // Trim - from end of text
}

@meowsus
Copy link

meowsus commented Jan 27, 2020

@sorahn
Copy link

sorahn commented Apr 22, 2020

@hagemann could you please add an explicit license to this gist? :)

@jyoo
Copy link

jyoo commented Apr 30, 2020

Wow! This is amazing. Thank you so much @hagemann!

@janguianof
Copy link

Thank you so much!

@melih
Copy link

melih commented Jul 24, 2021

It can support Turkish "İ" and "ı" characters with the lines below,

const a = 'àáâäæãåāăąçćčđďèéêëēėęěğǵḧîïíīįìıİłḿñńǹňôöòóœøōõőṕŕřßśšşșťțûüùúūǘůűųẃẍÿýžźż·/_,:;'
const b = 'aaaaaaaaaacccddeeeeeeeegghiiiiiiiilmnnnnoooooooooprrsssssttuuuuuuuuuwxyyzzz------'

@hagemann
Copy link
Author

@melih I’ve added the 2 characters. Thanks for contributing.

@sezerkarakaya
Copy link

Thank you so much.

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