diff --git a/.vscode/settings.json b/.vscode/settings.json index 1d376594..b1ff9f78 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -18,6 +18,7 @@ "Makernote", "nanoids", "nextjs", + "parameterizes", "presigner", "Provia", "qaub", diff --git a/__tests__/string.test.ts b/__tests__/string.test.ts new file mode 100644 index 00000000..e56dfc4e --- /dev/null +++ b/__tests__/string.test.ts @@ -0,0 +1,11 @@ +import { parameterize } from '@/utility/string'; + +describe('String', () => { + it('parameterizes', () => { + expect(parameterize('my tag')).toBe('my-tag'); + expect(parameterize('My Tag')).toBe('my-tag'); + expect(parameterize('my_tag')).toBe('my-tag'); + expect(parameterize('person\'s tag')).toBe('persons-tag'); + expect(parameterize('"person\'s tag"')).toBe('persons-tag'); + }); +}); diff --git a/src/utility/string.ts b/src/utility/string.ts index 4f840741..c9718b4a 100644 --- a/src/utility/string.ts +++ b/src/utility/string.ts @@ -19,5 +19,8 @@ export const capitalizeWords = (string = '') => export const parameterize = (string: string) => string .trim() - .replaceAll(/\s+/g, '-') + // Replaces spaces, underscores, and dashes with dashes + .replaceAll(/[\s_–—]/gi, '-') + // Removes all non-alphanumeric characters + .replaceAll(/([^a-z0-9-])/gi, '') .toLowerCase();