From 609c25295b50c8335211e6a13c86bf94f610ac3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Lafont?= Date: Thu, 10 Aug 2023 16:43:01 +0200 Subject: [PATCH 1/2] feat(regex): add subdomain regex --- packages/regex/src/__tests__/index.ts | 28 +++++++++++++++++++++++++++ packages/regex/src/index.ts | 2 ++ 2 files changed, 30 insertions(+) diff --git a/packages/regex/src/__tests__/index.ts b/packages/regex/src/__tests__/index.ts index d1add88f3..261db15b2 100644 --- a/packages/regex/src/__tests__/index.ts +++ b/packages/regex/src/__tests__/index.ts @@ -41,6 +41,7 @@ import { sixDigitsCode, spaces, uppercaseBasicDomain, + uppercaseBasicSubdomain, url, } from '..' @@ -547,6 +548,33 @@ describe('@regex', () => { expect(uppercaseBasicDomain.test(string)).toBe(expected) }) }) + + describe('uppercaseBasicSubdomain', () => { + test.each([ + [asciiLetters, false], + [asciiLowercase, false], + [asciiUppercase, false], + [backupKeyTest, false], + [domain, false], + [subDomain, true], + [dashStartDomain, false], + [uppercaseDomain, true], + [longTldDomain, true], + [digitsTest, false], + [emailTest, false], + [octdigits, false], + [hexdigits, false], + [printable, false], + [punctuation, false], + [whitespace, false], + [cronTest, false], + [macAddress1, false], + ...(urls.map(urlString => [urlString, false]) as [string, boolean][]), + ])('should match regex %s to be %s', (string, expected) => { + expect(uppercaseBasicSubdomain.test(string)).toBe(expected) + }) + }) + describe('advancedDomain', () => { test.each([ [asciiLetters, false], diff --git a/packages/regex/src/index.ts b/packages/regex/src/index.ts index e9b397d8a..047b40588 100644 --- a/packages/regex/src/index.ts +++ b/packages/regex/src/index.ts @@ -26,6 +26,8 @@ export const backupKey = /^[A-Z0-9]{32}$/ export const basicDomain = /^[a-z0-9-]+(\.[a-z0-9-]{1,63})+$/ export const uppercaseBasicDomain = /^(?![-])+[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]{1,63})+$/ +export const uppercaseBasicSubdomain = + /^(?![-])+[a-zA-Z0-9-]+\.[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]{1,63})+$/ // It will include special character that are non ASCII but valid for internationalized domain names (IDN) export const advancedDomainName = /^(?:(?:(?:[a-zA-Z0-9À-ÖØ-öø-ÿ](?:[a-zA-Z0-9À-ÖØ-öø-ÿ-]{0,61}[a-zA-Z0-9À-ÖØ-öø-ÿ])?)\.)+[a-zA-Z]{2,}|(?:[0-9]{1,3}\.){3}[0-9]{1,3})(?::[\d]{1,5})?$/ From 98a8d6d765b5bed16ad470527d9940c9bd11b138 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Lafont?= Date: Thu, 10 Aug 2023 16:55:12 +0200 Subject: [PATCH 2/2] fix: add changeset --- .changeset/silly-games-float.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/silly-games-float.md diff --git a/.changeset/silly-games-float.md b/.changeset/silly-games-float.md new file mode 100644 index 000000000..5401c313b --- /dev/null +++ b/.changeset/silly-games-float.md @@ -0,0 +1,5 @@ +--- +'@scaleway/regex': minor +--- + +Add subdomain regex