Slugify

Build Status

Transforms strings in any language into slugs.

It works by transliterating any Unicode character to alphanumeric ones, and replaces whitespaces with hyphens.

The goal is to generate general purpose human and machine-readable slugs. So -, ., _ and ~ characters are stripped from input even though they are "unreserved" characters for URLs (see RFC 3986). Having said that, any character can be used as a separator, including the ones above.

This package has no dependencies.

Examples

Slug.slugify("Hello, World!")
"hello-world"
Slug.slugify("你好,世界")
"nihaoshijie"
Slug.slugify("さようなら")
"sayounara"
Slug.slugify("🙅‍")
nil # Remember nil check if a valid slug is important!

Options

Whitespaces are replaced by separators (defaults to -), but you can use any string as a separator or pass "" to have none.

Slug.slugify(" How are you ? ")
"how-are-you"
Slug.slugify("1 2 3", separator: " != ")
"1 != 2 != 3"
Slug.slugify("Madam, I'm Adam", separator: "")
"madamimadam"

Slugs are forced lowercase by default, unless lowercase: false is passed.

Slug.slugify("StUdLy CaPs", lowercase: false)
"StUdLy-CaPs"

Specific graphemes can be ignored if you pass a string (or a list of strings) containing characters to ignore.

Slug.slugify("你好,世界", ignore: "你好")
"你好shijie"
Slug.slugify("你好,世界", ignore: ["你", "好"])
"你好shijie"

Caveats

Slugify cannot differentiate between Chinese characters and Japanese Kanji. In the same vein as other libraries, Japanese Kanji will transform into Chinese pinyin.

Installation

Add slugify to your list of dependencies in mix.exs:

def deps do
[{:slugify, "~> 1.0.0"}]
end

Don’t forget to update your dependencies.

$ mix deps.get

License

Slugify is released under MIT license.

Credits