Skip to content

Instantly share code, notes, and snippets.

@onyxfish
Last active January 2, 2023 14:37
Show Gist options
  • Star 43 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save onyxfish/db112abb8c1d8a5018e5 to your computer and use it in GitHub Desktop.
Save onyxfish/db112abb8c1d8a5018e5 to your computer and use it in GitHub Desktop.
Google Spreadsheets script to generate slugs from a range of cells

This script for Google Spreadsheets allows you to generate slugs for your data such as might be used for creating unique urls.

Use it like this!

# A B C
1 a b slug
2 foo baz bing =slugify(A2:B4)
3 bar BAZ
4 FOO baz-bing

And you get this!

# A B C
1 a b slug
2 foo baz bing foo-baz-bing
3 bar BAZ bar-baz
4 FOO baz-bing foo-baz-bing-2
function slugify(values) {
/*
* Convert the the vs in a range of cells into slugs.
*/
slugs = [];
for (var row = 0; row < values.length; row++) {
var bits = [];
for (var column = 0; column < values[row].length; column++) {
var value = values[row][column];
value = value.toLowerCase();
value = value.replace(/[^\w\s-]/g, '');
value = value.replace(/\s+/g, '-');
bits.push(value);
}
var base = bits.join('-');
var i = 1;
var slug = base;
while (slugs.indexOf(slug) >= 0) {
i++;
slug = base + '-' + i;
}
slugs.push(slug);
}
output = [];
for (var s = 0; s < slugs.length; s++) {
output.push([slugs[s]]);
}
return output;
}
function test() {
/*
* Test the slugify function.
*/
var TESTS = [
['foo', 'baz bing'],
['bar', 'BAZ'],
['FOO', 'baz-bing']
];
var RESULTS = [
'foo-baz-bing',
'bar-baz',
'foo-baz-bing-2'
];
var output = slugify(TESTS);
for (var t = 0; t < TESTS.length; t++) {
var test = TESTS[t];
var result = RESULTS[t];
Logger.log("[" + test + "] == " + result);
Logger.log((output[t][0] == result) + " ... " + output[t][0]);
}
}
@Ortizgrafael
Copy link

Not the most elegant solution.. but worked for me to generate slug from one single cell, on Collun E.
Obs. I had trouble with the ' " ' caracter. So I put it in the aux cell G1.

=(SUBSTITUTE(SUBSTITUTE(trim(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(regexreplace(regexreplace(regexreplace(regexreplace(REGEXREPLACE(REGEXREPLACE(lower(E2);" : ";"-");",";"");"ç";"c");"à";"a");" - ";"-");"õ";"o");"ô";"o");"ã";"a");"ê";"e");"ú";"u')");"ó";"o");"í";"i");"é";"e");"?";);",";);"'";);$G$1;);":";);")";);"(";);"º";);"ª";);"á";"a");"--";"-");"=";));" ";"-");"/";))

Hope it helps

@waheed-gk
Copy link

waheed-gk commented May 8, 2020

This should work for both single cells and arrays of cells including within the ARRAYFORMULA

function slugify(input) {
  if (input.map) {            // Test whether input is an array.
    return input.map(slugify); // Recurse over array if so.
  } else {
    let slug = '';
    slug = input.toLowerCase();
    slug = slug.replace(/[^\w\s-]/g, '');
    slug = slug.replace(/\s+/g, '-');
    return slug;
  }
}

@thaobn20
Copy link

06:07:20 Error TypeError: Cannot read property 'length' of undefined slugify @ slugify.gs:7
Debug error. i can't run it

@thaobn20
Copy link

=LOWER(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(TRIM(B2);" ";"-");"á";"a");"à";"a");"ạ";"a");"ả";"a");"ã";"a");"ă";"a");"ắ";"a");"ằ";"a");"ặ";"a");"ẳ";"a");"ẵ";"a");"â";"a");"ấ";"a");"ầ";"a");"ậ";"a");"ẩ";"a");"ẫ";"a");"ú";"u");"ù";"u");"ụ";"u");"ủ";"u");"ũ";"u");"ư";"u");"ứ";"u");"ừ";"u");"ự";"u");"ử";"u");"ữ";"u");"ó";"o");"ò";"o");"ọ";"o");"ỏ";"o");"õ";"o");"ô";"o");"ố";"o");"ồ";"o");"ộ";"o");"ổ";"o");"ỗ";"o");"ơ";"o");"ớ";"o");"ờ";"o");"ợ";"o");"ở";"o");"ỡ";"o");"é";"e");"è";"e");"ẹ";"e");"ẻ";"e");"ẽ";"e");"ê";"e");"ế";"e");"ề";"e");"ệ";"e");"ể";"e");"ễ";"e");"í";"i");"ì";"i");"ị";"i");"ỉ";"i");"ĩ";"i");"ý";"y");"ỳ";"y");"ỵ";"y");"ỷ";"y");"ỹ";"y");"đ";"d"))
i'm using for vietnam charactor

@akobashikawa
Copy link

In Google Sheets, I use this: =REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(LOWER(A2), "á", "a"), "é", "e"), "í", "i"), "ó", "o"), "ú", "u"), "ñ", "n"), "[^\w]", "-"), "--+", "-"), "-$", "")

@maixuandiep810
Copy link

@thaobn20

=LOWER(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(TRIM(B2);" ";"-");"á";"a");"à";"a");"ạ";"a");"ả";"a");"ã";"a");"ă";"a");"ắ";"a");"ằ";"a");"ặ";"a");"ẳ";"a");"ẵ";"a");"â";"a");"ấ";"a");"ầ";"a");"ậ";"a");"ẩ";"a");"ẫ";"a");"ú";"u");"ù";"u");"ụ";"u");"ủ";"u");"ũ";"u");"ư";"u");"ứ";"u");"ừ";"u");"ự";"u");"ử";"u");"ữ";"u");"ó";"o");"ò";"o");"ọ";"o");"ỏ";"o");"õ";"o");"ô";"o");"ố";"o");"ồ";"o");"ộ";"o");"ổ";"o");"ỗ";"o");"ơ";"o");"ớ";"o");"ờ";"o");"ợ";"o");"ở";"o");"ỡ";"o");"é";"e");"è";"e");"ẹ";"e");"ẻ";"e");"ẽ";"e");"ê";"e");"ế";"e");"ề";"e");"ệ";"e");"ể";"e");"ễ";"e");"í";"i");"ì";"i");"ị";"i");"ỉ";"i");"ĩ";"i");"ý";"y");"ỳ";"y");"ỵ";"y");"ỷ";"y");"ỹ";"y");"đ";"d"))
i'm using for vietnam charactor

Đ is not changed D

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