31 lines
514 B
JavaScript
31 lines
514 B
JavaScript
function slugify(value, fallback = 'item') {
|
|
if (!value || typeof value !== 'string') {
|
|
return fallback;
|
|
}
|
|
|
|
let slug = value
|
|
.toString()
|
|
.normalize('NFD')
|
|
.replace(/[\u0300-\u036f]/g, '')
|
|
.toLowerCase()
|
|
.trim()
|
|
.replace(/[^a-z0-9\s-]/g, '')
|
|
.replace(/\s+/g, '-')
|
|
.replace(/-+/g, '-')
|
|
.replace(/^-|-$/g, '');
|
|
|
|
if (!slug) {
|
|
slug = fallback;
|
|
}
|
|
|
|
if (/^\d+$/.test(slug)) {
|
|
slug = `${fallback}-${slug}`;
|
|
}
|
|
|
|
return slug;
|
|
}
|
|
|
|
module.exports = {
|
|
slugify,
|
|
};
|