From 6ea4031957d418ff8f4f65f96177c3a57a027dcd Mon Sep 17 00:00:00 2001 From: StephenPAdams Date: Wed, 20 Jan 2016 11:24:34 -0500 Subject: [PATCH 1/3] Added additional methods for checking validity of phone number based on region and/or multiple regions --- .../PhoneNumbers.Test/TestExampleNumbers.cs | 9 ++++ csharp/PhoneNumbers/PhoneNumberUtil.cs | 43 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/csharp/PhoneNumbers.Test/TestExampleNumbers.cs b/csharp/PhoneNumbers.Test/TestExampleNumbers.cs index 7862881..c2c8a77 100644 --- a/csharp/PhoneNumbers.Test/TestExampleNumbers.cs +++ b/csharp/PhoneNumbers.Test/TestExampleNumbers.cs @@ -43,6 +43,15 @@ protected void SetUp() wrongTypeCases.Clear(); } + [Test] + public void TestParse() + { + var phoneNumber = phoneNumberUtil.Parse("410-978-2234"); + var isValid = phoneNumberUtil.IsValidNumber(phoneNumber); + + Assert.IsTrue(isValid); + } + /** * @param exampleNumberRequestedType type we are requesting an example number for * @param possibleExpectedTypes acceptable types that this number should match, such as diff --git a/csharp/PhoneNumbers/PhoneNumberUtil.cs b/csharp/PhoneNumbers/PhoneNumberUtil.cs index ca81e69..e35976b 100644 --- a/csharp/PhoneNumbers/PhoneNumberUtil.cs +++ b/csharp/PhoneNumbers/PhoneNumberUtil.cs @@ -1942,6 +1942,49 @@ private bool IsNumberMatchingDesc(String nationalNumber, PhoneNumberDesc numberD return possibleNumberPatternMatch.Success && nationalNumberPatternMatch.Success; } + /// + /// Checks to see if the given phone number is valid for the given regionCode + /// + /// + /// + /// True if valid, false if not (or not able to parse phone number based on region) + public bool IsValidNumber(String phoneNumber, String regionCode) + { + if (String.IsNullOrEmpty(regionCode)) + return false; + + var pn = Parse(phoneNumber, regionCode); + if (pn != null) + return IsValidNumberForRegion(pn, regionCode); + + return false; + } + + /// + /// Checks to see if the given phone number is valid for one of the regionCodes + /// + /// + /// + /// True if valid, false if not (or not able to parse phone number based on one of the regions) + public bool IsValidNumber(String phoneNumber, IList regionCodes) + { + if (regionCodes == null || regionCodes.Count == 0) + return false; + + var phoneNumbers = new List(); + foreach (var regionCode in regionCodes) + { + var pn = Parse(phoneNumber, regionCode); + if (pn != null) + { + if (IsValidNumberForRegion(pn, regionCode)) + phoneNumbers.Add(pn); + } + } + + return phoneNumbers.Count > 0; + } + /** * Tests whether a phone number matches a valid pattern. Note this doesn't verify the number * is actually in use, which is impossible to tell by just looking at a number itself. From 85dde50618bed0794d66ead61d7140356a86043b Mon Sep 17 00:00:00 2001 From: StephenPAdams Date: Wed, 20 Jan 2016 22:36:54 -0500 Subject: [PATCH 2/3] Added test for multiple regions for a specific phone number This will allow us to see if an inputted number matches a preapproved set of regions. Example: we might allow both US and CA (US and Canadian) phone numbers, so we want to see if it's valid. --- csharp/PhoneNumbers.Test/TestExampleNumbers.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/csharp/PhoneNumbers.Test/TestExampleNumbers.cs b/csharp/PhoneNumbers.Test/TestExampleNumbers.cs index c2c8a77..c916fc5 100644 --- a/csharp/PhoneNumbers.Test/TestExampleNumbers.cs +++ b/csharp/PhoneNumbers.Test/TestExampleNumbers.cs @@ -44,12 +44,15 @@ protected void SetUp() } [Test] - public void TestParse() + public void TestParseMultipleRegions() { - var phoneNumber = phoneNumberUtil.Parse("410-978-2234"); - var isValid = phoneNumberUtil.IsValidNumber(phoneNumber); + var usPhoneNumber = "14109992222"; + var canadaPhoneNumber = "14039782234"; + var usValid = phoneNumberUtil.IsValidNumber(usPhoneNumber, new List() { "US", "CA" }); + var canadaValid = phoneNumberUtil.IsValidNumber(canadaPhoneNumber, new List() { "US", "CA" }); - Assert.IsTrue(isValid); + Assert.IsTrue(usValid); + Assert.IsTrue(canadaValid); } /** From 81dd12c24a7f7e13fcdbcbdf5f49706463382d8b Mon Sep 17 00:00:00 2001 From: StephenPAdams Date: Wed, 20 Jan 2016 22:51:16 -0500 Subject: [PATCH 3/3] Added matched region code to multiple region code match when doing IsValid --- csharp/PhoneNumbers.Test/TestExampleNumbers.cs | 10 ++++++++-- csharp/PhoneNumbers/PhoneNumberUtil.cs | 11 +++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/csharp/PhoneNumbers.Test/TestExampleNumbers.cs b/csharp/PhoneNumbers.Test/TestExampleNumbers.cs index c916fc5..9ce1149 100644 --- a/csharp/PhoneNumbers.Test/TestExampleNumbers.cs +++ b/csharp/PhoneNumbers.Test/TestExampleNumbers.cs @@ -48,11 +48,17 @@ public void TestParseMultipleRegions() { var usPhoneNumber = "14109992222"; var canadaPhoneNumber = "14039782234"; - var usValid = phoneNumberUtil.IsValidNumber(usPhoneNumber, new List() { "US", "CA" }); - var canadaValid = phoneNumberUtil.IsValidNumber(canadaPhoneNumber, new List() { "US", "CA" }); + String matchedUsRegionCode; + String matchedCanadianRegionCode; + + // Tests + var usValid = phoneNumberUtil.IsValidNumber(usPhoneNumber, new List() { "US", "CA" }, out matchedUsRegionCode); + var canadaValid = phoneNumberUtil.IsValidNumber(canadaPhoneNumber, new List() { "US", "CA" }, out matchedCanadianRegionCode); Assert.IsTrue(usValid); Assert.IsTrue(canadaValid); + Assert.AreEqual(matchedUsRegionCode, "US"); + Assert.AreEqual(matchedCanadianRegionCode, "CA"); } /** diff --git a/csharp/PhoneNumbers/PhoneNumberUtil.cs b/csharp/PhoneNumbers/PhoneNumberUtil.cs index e35976b..c92663b 100644 --- a/csharp/PhoneNumbers/PhoneNumberUtil.cs +++ b/csharp/PhoneNumbers/PhoneNumberUtil.cs @@ -1961,13 +1961,17 @@ public bool IsValidNumber(String phoneNumber, String regionCode) } /// - /// Checks to see if the given phone number is valid for one of the regionCodes + /// Checks to see if the given phone number is valid for one of the regionCodes. If valid, matchedRegionCode will be populated + /// with the matched region code for the valid phone number. /// /// /// + /// If a valid number, this will be populated with the matching region code. /// True if valid, false if not (or not able to parse phone number based on one of the regions) - public bool IsValidNumber(String phoneNumber, IList regionCodes) + public bool IsValidNumber(String phoneNumber, IList regionCodes, out String matchedRegionCode) { + matchedRegionCode = String.Empty; + if (regionCodes == null || regionCodes.Count == 0) return false; @@ -1978,7 +1982,10 @@ public bool IsValidNumber(String phoneNumber, IList regionCodes) if (pn != null) { if (IsValidNumberForRegion(pn, regionCode)) + { + matchedRegionCode = regionCode; phoneNumbers.Add(pn); + } } }