Skip to content

Instantly share code, notes, and snippets.

@vanquyet94
Forked from onyxfish/README.md
Created June 22, 2021 15:51
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vanquyet94/2fbc5a6cc808a121eb32c8a1f5f3f27c to your computer and use it in GitHub Desktop.
Save vanquyet94/2fbc5a6cc808a121eb32c8a1f5f3f27c 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]);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment