Skip to content

Commit 774dc10

Browse files
committed
phone util enhancement
1 parent 27f9b40 commit 774dc10

File tree

3 files changed

+38
-16
lines changed

3 files changed

+38
-16
lines changed

src/SharedKernel/Helpers/PhoneUtil.cs

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ public static bool TryFormatArmenianMsisdn(string? input, out string? formatted)
1414

1515
var s = input.Trim();
1616

17-
// Special-case exact "(374)" prefix
1817
if (s.StartsWith("(374)", StringComparison.Ordinal))
1918
{
2019
var rest = DigitsOnly(s.AsSpan(5));
@@ -28,7 +27,6 @@ public static bool TryFormatArmenianMsisdn(string? input, out string? formatted)
2827
return false;
2928
}
3029

31-
// General tolerant parse: allow spaces, dashes, dots, parentheses; '+' only at start
3230
var sb = new StringBuilder(s.Length);
3331
for (var i = 0; i < s.Length; i++)
3432
{
@@ -58,6 +56,8 @@ public static bool TryFormatArmenianMsisdn(string? input, out string? formatted)
5856
ReadOnlySpan<char> last8;
5957

6058
var plusAtStart = s[0] == '+';
59+
var doubleZeroAtStart = s.StartsWith("00", StringComparison.Ordinal);
60+
6161
if (plusAtStart)
6262
{
6363
if (span.Length == 11 && span.StartsWith("374".AsSpan()))
@@ -72,20 +72,36 @@ public static bool TryFormatArmenianMsisdn(string? input, out string? formatted)
7272
}
7373
else
7474
{
75-
switch (span.Length)
75+
// Handle "00" international prefix for Armenia: "00374" + 8 digits => total 13 digits
76+
if (doubleZeroAtStart && span.Length == 13 && span.StartsWith("00374".AsSpan()))
77+
{
78+
last8 = span[5..]; // skip "00" + "374"
79+
}
80+
else
7681
{
77-
case 11 when span.StartsWith("374".AsSpan()):
78-
last8 = span[3..];
79-
break;
80-
case 9 when span[0] == '0':
81-
last8 = span[1..];
82-
break;
83-
case 8:
84-
last8 = span;
85-
break;
86-
default:
87-
formatted = input;
88-
return false;
82+
switch (span.Length)
83+
{
84+
case 11 when span.StartsWith("374".AsSpan()):
85+
{
86+
last8 = span[3..];
87+
break;
88+
}
89+
case 9 when span[0] == '0':
90+
{
91+
last8 = span[1..];
92+
break;
93+
}
94+
case 8:
95+
{
96+
last8 = span;
97+
break;
98+
}
99+
default:
100+
{
101+
formatted = input;
102+
return false;
103+
}
104+
}
89105
}
90106
}
91107

src/SharedKernel/SharedKernel.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<PackageReadmeFile>Readme.md</PackageReadmeFile>
99
<Authors>Pandatech</Authors>
1010
<Copyright>MIT</Copyright>
11-
<Version>1.6.5</Version>
11+
<Version>1.6.6</Version>
1212
<PackageId>Pandatech.SharedKernel</PackageId>
1313
<Title>Pandatech Shared Kernel Library</Title>
1414
<PackageTags>Pandatech, shared kernel, library, OpenAPI, Swagger, utilities, scalar</PackageTags>

test/SharedKernel.Tests/PhoneUtilTests.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ namespace SharedKernel.Tests;
55
public class PhoneUtilTests
66
{
77
[Theory]
8+
[InlineData("0037493910593", "+37493910593")]
89
[InlineData("+37493910593", "+37493910593")]
910
[InlineData("37493910593", "+37493910593")]
1011
[InlineData("093910593", "+37493910593")]
1112
[InlineData("93910593", "+37493910593")]
1213
[InlineData("(374)93910593", "+37493910593")]
1314
// tolerant separators
15+
[InlineData("00 374 93 910-593", "+37493910593")]
1416
[InlineData("+374 93 910 593", "+37493910593")]
1517
[InlineData("374-93-910-593", "+37493910593")]
1618
[InlineData("(374) 93 910 593", "+37493910593")]
@@ -24,6 +26,10 @@ public void Formats_Armenian_Numbers_When_Valid(string input, string expected)
2426
[Theory]
2527
[InlineData("+12025550199")] // foreign
2628
[InlineData("441234567890")] // foreign
29+
[InlineData("+7123-4567-901")] // Russian 1
30+
[InlineData("+71234567901")] // Russian 2
31+
[InlineData("+7 123 4567 901")] // Russian 2
32+
[InlineData("+7-123-4567-901")] // Russian 3
2733
[InlineData("+++37493910593")] // invalid
2834
[InlineData("37493A10593")] // invalid char
2935
[InlineData("(374)1234567")] // only 7 digits after prefix

0 commit comments

Comments
 (0)