diff --git a/.changeset/green-mangos-shake.md b/.changeset/green-mangos-shake.md new file mode 100644 index 000000000..40803068a --- /dev/null +++ b/.changeset/green-mangos-shake.md @@ -0,0 +1,5 @@ +--- +"@scaleway/regex": minor +--- + +regex: add new json regex diff --git a/packages/regex/src/__tests__/index.test.ts b/packages/regex/src/__tests__/index.test.ts index 5d5e8f926..dc252f261 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, + json, kafkaUsernameRegex, macAddress, nineDigitsCode, @@ -1154,6 +1155,19 @@ describe('@regex', () => { }) }) + describe('json', () => { + test.each([ + ['{"key": "value"}', true], + ['{"key": {"nested": "value"}}', true], + ['{"key": ["array", "value"]}', true], + ['{"key": "value"', false], + ['{"key": {"nested": "value"', false], + ['{"key": ["array", "value"', false], + ])('should match regex %s to be %s', (string, expected) => { + expect(json.test(string)).toBe(expected) + }) + }) + describe('kafkaUsernameRegex', () => { test.each([ ['username', true], diff --git a/packages/regex/src/index.ts b/packages/regex/src/index.ts index 270c4f28a..b43116ccc 100644 --- a/packages/regex/src/index.ts +++ b/packages/regex/src/index.ts @@ -102,3 +102,5 @@ 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])?)*$/ + +export const json = /({(?:[^{}]|{(?:[^{}]|{[^{}]*})*})*})/s