Turn a product title into a URL slug
The catalogue builds a URL from each product title, and the result has to be safe to put in a path.
- Lowercase, and keep only letters a-z and digits.
- Every run of anything else collapses to a single dash.
- No dash at the start or the end.
- A title with nothing usable in it gives an empty string.
slugify(title: string) → string
Where you start
def slugify(title: str) -> str:
Worked examples
| Call | Result |
|---|---|
slugify(" Blue Widget, 12mm! ") | "blue-widget-12mm" |
slugify("A---B") | "a-b" |
slugify("Already-slugged") | "already-slugged" |
slugify("!!!") | "" |
Hint
Append a dash only when there is already something to separate, then trim the one you may have left on the end.
Reference solution in Python
def slugify(title: str) -> str:
result = ''
for ch in title.lower():
if ch.isascii() and ch.isalnum():
result += ch
elif result and not result.endswith('-'):
result += '-'
return result[:-1] if result.endswith('-') else result