From 442728eee68b8640422c14748aab4784d10cd768 Mon Sep 17 00:00:00 2001 From: Julien Saguez Date: Tue, 6 Aug 2024 15:34:18 +0200 Subject: [PATCH] feat(regex): add elevenDigitsCode and nineDigitsCode regex --- .changeset/wicked-goats-punch.md | 5 +++ packages/regex/src/__tests__/index.test.ts | 44 ++++++++++++++++++++++ packages/regex/src/index.ts | 2 + 3 files changed, 51 insertions(+) create mode 100644 .changeset/wicked-goats-punch.md diff --git a/.changeset/wicked-goats-punch.md b/.changeset/wicked-goats-punch.md new file mode 100644 index 000000000..63973f5d8 --- /dev/null +++ b/.changeset/wicked-goats-punch.md @@ -0,0 +1,5 @@ +--- +"@scaleway/regex": minor +--- + +Add `elevenDigitsCode` and `nineDigitsCode` regex diff --git a/packages/regex/src/__tests__/index.test.ts b/packages/regex/src/__tests__/index.test.ts index af0298618..7aeebdda4 100644 --- a/packages/regex/src/__tests__/index.test.ts +++ b/packages/regex/src/__tests__/index.test.ts @@ -27,6 +27,7 @@ import { cron, dashedIpv4, digits, + elevenDigitsCode, email, fourDigitsCode, hexadecimal, @@ -37,6 +38,7 @@ import { ipv6, ipv6Cidr, macAddress, + nineDigitsCode, pathSegment, phone, reverseDNS, @@ -64,6 +66,7 @@ const uppercaseDomain = 'SUB.another-example.com' const longTldDomain = 'sub.another-example.verylongtld' const cronTest = '0 0 0 * * 0 1-4' const digitsTest = '0123456789' +const elevenDigitsCodeTest = '01234567890' const emailTest = 'test@scaleway.com' const fourDigitsTest = '2345' const hexdigits = '0123456789abcdefABCDEF' @@ -85,6 +88,7 @@ const urls = [ ] const whitespace = ' \t\n\r\x0b\x0c' const macAddress1 = '1F:B5:FA:47:CD:C4' +const nineDigitsCodeTest = '012345678' const linuxPaths = { BAD: [ '/var/test@', @@ -640,6 +644,26 @@ describe('@regex', () => { }) }) + describe('elevenDigitsCode', () => { + test.each([ + [asciiLetters, false], + [asciiLowercase, false], + [asciiUppercase, false], + [digitsTest, false], + [emailTest, false], + [octdigits, false], + [elevenDigitsCodeTest, true], + [hexdigits, false], + [printable, false], + [punctuation, false], + [whitespace, false], + [cronTest, false], + [macAddress1, false], + ])('should match regex %s to be %s', (string, expected) => { + expect(elevenDigitsCode.test(string)).toBe(expected) + }) + }) + describe('email', () => { test.each([ [asciiLetters, false], @@ -679,6 +703,26 @@ describe('@regex', () => { }) }) + describe('nineDigitsCode', () => { + test.each([ + [asciiLetters, false], + [asciiLowercase, false], + [asciiUppercase, false], + [digitsTest, false], + [emailTest, false], + [octdigits, false], + [nineDigitsCodeTest, true], + [hexdigits, false], + [printable, false], + [punctuation, false], + [whitespace, false], + [cronTest, false], + [macAddress1, false], + ])('should match regex %s to be %s', (string, expected) => { + expect(nineDigitsCode.test(string)).toBe(expected) + }) + }) + describe('macAddress', () => { test.each([ [asciiLetters, false], diff --git a/packages/regex/src/index.ts b/packages/regex/src/index.ts index 352eabd4c..88b3094cb 100644 --- a/packages/regex/src/index.ts +++ b/packages/regex/src/index.ts @@ -43,6 +43,8 @@ export const fourDigitsCode = /^[0-9]{4}$/ export const phone = /^\+[0-9]*/ export const spaces = /^\s*$/ export const sixDigitsCode = /^[0-9]{6}$/ +export const nineDigitsCode = /^[0-9]{9}$/ +export const elevenDigitsCode = /^[0-9]{11}$/ export const url = /^http(s)?:\/\/?[\w.-]+(?:\.[\w.-]+)+[\w\-._~:/?#[\]@!$&'()*+,;=.]+$/ export const hexadecimal = /^[0-9a-fA-F]+$/