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 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})?$/