From b83c20ac3d6dbd063820b60266ab447ebb58801c Mon Sep 17 00:00:00 2001 From: Sam Becker Date: Mon, 11 Dec 2023 20:36:01 -0600 Subject: [PATCH] Improve tag punctuation handling --- .vscode/settings.json | 1 + __tests__/string.test.ts | 11 +++++++++++ src/utility/string.ts | 5 ++++- 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 __tests__/string.test.ts 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();