Skip to content

Commit 69dc566

Browse files
feat(regex): add regex sg port (#2514)
* feat: add port regex sg * docs: changeset * feat: add test u * fix: add comm
1 parent d153ea4 commit 69dc566

File tree

3 files changed

+64
-0
lines changed

3 files changed

+64
-0
lines changed

.changeset/rude-windows-return.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@scaleway/regex": minor
3+
---
4+
5+
Add new regex for port security group handling

packages/regex/src/__tests__/index.test.ts

+55
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import {
4444
phone,
4545
reverseDNS,
4646
s3BucketName,
47+
sgPortRange,
4748
sixDigitsCode,
4849
spaces,
4950
uppercaseBasicDomain,
@@ -1062,4 +1063,58 @@ describe('@regex', () => {
10621063
expect(absolutePath.test(string)).toBe(expected)
10631064
})
10641065
})
1066+
1067+
describe('sgPortRange', () => {
1068+
test.each([
1069+
// Valid single ports
1070+
['1', true],
1071+
['80', true],
1072+
['443', true],
1073+
['8080', true],
1074+
['65535', true],
1075+
1076+
// Valid port ranges
1077+
['1-80', true],
1078+
['80-443', true],
1079+
['1000-2000', true],
1080+
['1-65535', true],
1081+
['8080-8090', true],
1082+
1083+
// Edge cases for valid ports
1084+
['1-1', true],
1085+
['65535-65535', true],
1086+
1087+
// Invalid: Port 0 not allowed => but regex was like that so product might accept it, keep it like that for now
1088+
['0', true],
1089+
['0-80', true],
1090+
['80-0', true],
1091+
1092+
// Invalid: Ports above 65535
1093+
['65536', false],
1094+
['70000', false],
1095+
['1-70000', false],
1096+
['65536-65537', false],
1097+
1098+
// Invalid formats
1099+
['', false],
1100+
['a', false],
1101+
['1a', false],
1102+
['a1', false],
1103+
['1,2', false],
1104+
['1:2', false],
1105+
['1 - 2', false],
1106+
['1~2', false],
1107+
['1-2-3', false],
1108+
['1-', false],
1109+
['-1', false],
1110+
['-', false],
1111+
['1--2', false],
1112+
1113+
// Edge cases
1114+
['65534-65535', true],
1115+
['65535-65535', true],
1116+
])('should match regex %s to be %s', (string, expected) => {
1117+
expect(sgPortRange.test(string)).toBe(expected)
1118+
})
1119+
})
10651120
})

packages/regex/src/index.ts

+4
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,7 @@ export const dashedIpv4 =
8888

8989
export const pathSegment = /^[_a-zA-Z0-9]([-_.a-zA-Z0-9]*[_a-zA-Z0-9])?$/
9090
export const absolutePath = /^\/(([\w. -]*)[^\s?]\/?)+$/
91+
92+
// A port range between 1 to 65535 separated by an hypen or a single number
93+
export const sgPortRange =
94+
/^(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5]?[0-9]{1,4})(-(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5]?[0-9]{1,4}))?$/

0 commit comments

Comments
 (0)