From 9ced13689d6bf7b9d217e1e26f67b9580bf26263 Mon Sep 17 00:00:00 2001 From: mjolly Date: Mon, 15 Sep 2025 11:06:39 +0200 Subject: [PATCH] feat(regex): add new kafka username regex --- .changeset/calm-singers-whisper.md | 5 +++++ packages/regex/src/__tests__/index.test.ts | 14 ++++++++++++++ packages/regex/src/index.ts | 4 ++++ 3 files changed, 23 insertions(+) create mode 100644 .changeset/calm-singers-whisper.md diff --git a/.changeset/calm-singers-whisper.md b/.changeset/calm-singers-whisper.md new file mode 100644 index 000000000..cf651d7bc --- /dev/null +++ b/.changeset/calm-singers-whisper.md @@ -0,0 +1,5 @@ +--- +"@scaleway/regex": minor +--- + +feat(regex): add new kafka username regex diff --git a/packages/regex/src/__tests__/index.test.ts b/packages/regex/src/__tests__/index.test.ts index 34b5b9721..5d5e8f926 100644 --- a/packages/regex/src/__tests__/index.test.ts +++ b/packages/regex/src/__tests__/index.test.ts @@ -38,6 +38,7 @@ import { ipv4Cidr, ipv6, ipv6Cidr, + kafkaUsernameRegex, macAddress, nineDigitsCode, organizationAlias, @@ -1153,6 +1154,19 @@ describe('@regex', () => { }) }) + describe('kafkaUsernameRegex', () => { + test.each([ + ['username', true], + ['user-name', true], + ['my-group.user-name', true], + ['-user-name', false], + ['user-Name-', false], + ['user..name', false], + ])('should match regex %s to be %s', (string, expected) => { + expect(kafkaUsernameRegex.test(string)).toBe(expected) + }) + }) + describe('uuid', () => { test.each([ [asciiLetters, false], diff --git a/packages/regex/src/index.ts b/packages/regex/src/index.ts index 41444bb57..270c4f28a 100644 --- a/packages/regex/src/index.ts +++ b/packages/regex/src/index.ts @@ -98,3 +98,7 @@ export const sgPortRange = // Include all characters except backtick ` and @ as first character export const password = /^(?!@)[^`]*$/ + +// A kafka username contains lowercase letters and numbers, with each segment starting and ending with a letter or number. Hyphens are only allowed in the middle of segments. Example: "username", "user-name", "my-group.user-name" +export const kafkaUsernameRegex = + /^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$/