From 983da6e9f9a0d4436e9b27c875d5cbdde223edc1 Mon Sep 17 00:00:00 2001 From: Eric Howey Date: Mon, 12 Apr 2021 15:10:29 -0700 Subject: [PATCH] Add Dot and Hyphen Outputs --- README.md | 5 ++ src/NanpNumberFormatter.php | 6 +++ tests/NanpNumberFormatterTest.php | 78 ++++++++++++++++++++----------- 3 files changed, 63 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index d425503..1e19143 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ You can install this package via composer - E.164 `+12125550123` - Parenthesis `(212) 555-0123` - Dot `212.555.0123` +- Hyphen `212-555-0123` - Space `212 555 0123` - Letters `1800FLOWERS` @@ -20,6 +21,8 @@ etc... ## Outputted Formats - E.164 `+12125550123` +- Dot Format `212.555.0123` +- Hyphen Format `212-555-0123` - National Format `(212) 555-0123` - International Format `+1 212 555 0123` - 10 Digit `2125550123` @@ -38,6 +41,8 @@ $number = NanpNumberFormatter::format("(212) 555-0123"); echo $number->e164; // +12125550123 echo $number->nationalFormat; // (212) 555-0123 echo $number->internationalFormat; // +1 212 555 0123 +echo $number->dotFormat; // 212.555.0123 +echo $number->hyphenFormat; // 212-555-0123 echo $number->tendigit; // 2125550123 echo $number->elevendigit; // 12125550123 echo $number->uri; // tel:+12125550123 diff --git a/src/NanpNumberFormatter.php b/src/NanpNumberFormatter.php index d35077a..a15e5b2 100644 --- a/src/NanpNumberFormatter.php +++ b/src/NanpNumberFormatter.php @@ -12,6 +12,8 @@ class NanpNumberFormatter public $npa; public $nxx; public $line; + public $dotFormat; + public $hyphenFormat; public $nationalFormat; public $internationalFormat; public $tendigit; @@ -27,6 +29,8 @@ function __construct() $this->npa = "Invalid"; $this->nxx = "Invalid"; $this->line = "Invalid"; + $this->dotFormat = "Invalid"; + $this->hyphenFormat = "Invalid"; $this->nationalFormat = "Invalid"; $this->internationalFormat = "Invalid"; $this->tendigit = "Invalid"; @@ -146,6 +150,8 @@ public function parse($number, bool $wildcards = false) $this->npa = substr($number, 2, 3); $this->nxx = substr($number, 5, 3); $this->line = substr($number, 8, 4); + $this->dotFormat = $this->npa . "." . $this->nxx . "." . $this->line; + $this->hyphenFormat = $this->npa . "-" . $this->nxx . "-" . $this->line; $this->nationalFormat = "(" . $this->npa . ") " . $this->nxx . "-" . $this->line; $this->internationalFormat = "+1" . " " . $this->npa . " " . $this->nxx . " " . $this->line; $this->tendigit = $this->npa . $this->nxx . $this->line; diff --git a/tests/NanpNumberFormatterTest.php b/tests/NanpNumberFormatterTest.php index 771d7a5..2f6c568 100644 --- a/tests/NanpNumberFormatterTest.php +++ b/tests/NanpNumberFormatterTest.php @@ -25,6 +25,8 @@ public function testEmpty() $this->assertEquals("Invalid", $number->tendigit, "The tendigit value is incorrect"); $this->assertEquals("Invalid", $number->elevendigit, "The elevendigit value is incorrect"); $this->assertEquals("Invalid", $number->uri, "The uri value is incorrect"); + $this->assertEquals("Invalid", $number->dotFormat, "The dotFormat is incorrect"); + $this->assertEquals("Invalid", $number->hyphenFormat, "The hyphenFormat is incorrect"); $this->assertEquals("Invalid", $number->nationalFormat, "The nationalFormat value is incorrect"); $this->assertEquals("Invalid", $number->internationalFormat, "The internationalFormat value is incorrect"); $this->assertEquals("Invalid", $number->npa, "The npa value is incorrect"); @@ -41,6 +43,8 @@ public function test12125550123() '(212) 555-0123', '1 (212) 555-0123', '212.555.0123', + '212-555-0123', + '1-212-555-0123', '+1 (212) 555-0123', '+12125550123', ' 1 (212) 555-0123 ' @@ -55,6 +59,8 @@ public function test12125550123() $this->assertEquals("2125550123", $number->tendigit, "The tendigit value is incorrect"); $this->assertEquals("12125550123", $number->elevendigit, "The elevendigit value is incorrect"); $this->assertEquals("tel:+12125550123", $number->uri, "The uri value is incorrect"); + $this->assertEquals("212.555.0123", $number->dotFormat, "The dotFormat is incorrect"); + $this->assertEquals("212-555-0123", $number->hyphenFormat, "The hyphenFormat is incorrect"); $this->assertEquals("(212) 555-0123", $number->nationalFormat, "The nationalFormat value is incorrect"); $this->assertEquals("+1 212 555 0123", $number->internationalFormat, "The internationalFormat value is incorrect"); $this->assertEquals("212", $number->npa, "The npa value is incorrect"); @@ -71,6 +77,8 @@ public function test8008008000() '(800) 800-8000', '1 (800) 800-8000', '800.800.8000', + '800-800-8000', + '1-800-800-8000', '+1 (800) 800-8000', '+18008008000', ' 1 (800) 800-8000 ' @@ -85,6 +93,8 @@ public function test8008008000() $this->assertEquals("8008008000", $number->tendigit, "The tendigit value is incorrect"); $this->assertEquals("18008008000", $number->elevendigit, "The elevendigit value is incorrect"); $this->assertEquals("tel:+18008008000", $number->uri, "The uri value is incorrect"); + $this->assertEquals("800.800.8000", $number->dotFormat, "The dotFormat is incorrect"); + $this->assertEquals("800-800-8000", $number->hyphenFormat, "The hyphenFormat is incorrect"); $this->assertEquals("(800) 800-8000", $number->nationalFormat, "The nationalFormat value is incorrect"); $this->assertEquals("+1 800 800 8000", $number->internationalFormat, "The internationalFormat value is incorrect"); $this->assertEquals("800", $number->npa, "The npa value is incorrect"); @@ -103,6 +113,8 @@ public function testLetterInput() $this->assertEquals("8003569377", $number->tendigit, "The tendigit value is incorrect"); $this->assertEquals("18003569377", $number->elevendigit, "The elevendigit value is incorrect"); $this->assertEquals("tel:+18003569377", $number->uri, "The uri value is incorrect"); + $this->assertEquals("800.356.9377", $number->dotFormat, "The dotFormat is incorrect"); + $this->assertEquals("800-356-9377", $number->hyphenFormat, "The hyphenFormat is incorrect"); $this->assertEquals("(800) 356-9377", $number->nationalFormat, "The nationalFormat value is incorrect"); $this->assertEquals("+1 800 356 9377", $number->internationalFormat, "The internationalFormat value is incorrect"); $this->assertEquals("800", $number->npa, "The npa value is incorrect"); @@ -120,6 +132,8 @@ public function testLessThan10Characters() $this->assertEquals("Invalid", $number->tendigit, "The tendigit value is incorrect"); $this->assertEquals("Invalid", $number->elevendigit, "The elevendigit value is incorrect"); $this->assertEquals("Invalid", $number->uri, "The uri value is incorrect"); + $this->assertEquals("Invalid", $number->dotFormat, "The dotFormat is incorrect"); + $this->assertEquals("Invalid", $number->hyphenFormat, "The hyphenFormat is incorrect"); $this->assertEquals("Invalid", $number->nationalFormat, "The nationalFormat value is incorrect"); $this->assertEquals("Invalid", $number->internationalFormat, "The internationalFormat value is incorrect"); $this->assertEquals("Invalid", $number->npa, "The npa value is incorrect"); @@ -138,6 +152,8 @@ public function testInvalidCharacters() $this->assertEquals("Invalid", $number->tendigit, "The tendigit value is incorrect"); $this->assertEquals("Invalid", $number->elevendigit, "The elevendigit value is incorrect"); $this->assertEquals("Invalid", $number->uri, "The uri value is incorrect"); + $this->assertEquals("Invalid", $number->dotFormat, "The dotFormat is incorrect"); + $this->assertEquals("Invalid", $number->hyphenFormat, "The hyphenFormat is incorrect"); $this->assertEquals("Invalid", $number->nationalFormat, "The nationalFormat value is incorrect"); $this->assertEquals("Invalid", $number->internationalFormat, "The internationalFormat value is incorrect"); $this->assertEquals("Invalid", $number->npa, "The npa value is incorrect"); @@ -155,6 +171,8 @@ public function testNonNANPNumber() $this->assertEquals("Invalid", $number->tendigit, "The tendigit value is incorrect"); $this->assertEquals("Invalid", $number->elevendigit, "The elevendigit value is incorrect"); $this->assertEquals("Invalid", $number->uri, "The uri value is incorrect"); + $this->assertEquals("Invalid", $number->dotFormat, "The dotFormat is incorrect"); + $this->assertEquals("Invalid", $number->hyphenFormat, "The hyphenFormat is incorrect"); $this->assertEquals("Invalid", $number->nationalFormat, "The nationalFormat value is incorrect"); $this->assertEquals("Invalid", $number->internationalFormat, "The internationalFormat value is incorrect"); $this->assertEquals("Invalid", $number->npa, "The npa value is incorrect"); @@ -172,6 +190,8 @@ public function testNumberTooLong() $this->assertEquals("Invalid", $number->tendigit, "The tendigit value is incorrect"); $this->assertEquals("Invalid", $number->elevendigit, "The elevendigit value is incorrect"); $this->assertEquals("Invalid", $number->uri, "The uri value is incorrect"); + $this->assertEquals("Invalid", $number->dotFormat, "The dotFormat is incorrect"); + $this->assertEquals("Invalid", $number->hyphenFormat, "The hyphenFormat is incorrect"); $this->assertEquals("Invalid", $number->nationalFormat, "The nationalFormat value is incorrect"); $this->assertEquals("Invalid", $number->internationalFormat, "The internationalFormat value is incorrect"); $this->assertEquals("Invalid", $number->npa, "The npa value is incorrect"); @@ -189,6 +209,8 @@ public function testNonNXXNXXXXXX() $this->assertEquals("Invalid", $number->tendigit, "The tendigit value is incorrect"); $this->assertEquals("Invalid", $number->elevendigit, "The elevendigit value is incorrect"); $this->assertEquals("Invalid", $number->uri, "The uri value is incorrect"); + $this->assertEquals("Invalid", $number->dotFormat, "The dotFormat is incorrect"); + $this->assertEquals("Invalid", $number->hyphenFormat, "The hyphenFormat is incorrect"); $this->assertEquals("Invalid", $number->nationalFormat, "The nationalFormat value is incorrect"); $this->assertEquals("Invalid", $number->internationalFormat, "The internationalFormat value is incorrect"); $this->assertEquals("Invalid", $number->npa, "The npa value is incorrect"); @@ -198,35 +220,39 @@ public function testNonNXXNXXXXXX() public function testWildCardWithFlagFalse() { - $number = NanpNumberFormatter::format("(212) - 555 01**"); - $this->assertNotEmpty($number, "Formatter returned nothing when it should have returned an object"); - $this->assertEquals("(212) - 555 01** contains invalid characters", $number->errorMessage, "errorMessage is incorrect"); - $this->assertEquals(false, $number->isValid, "isValid is not false for an invalid number"); - $this->assertEquals("Invalid", $number->e164, "e164 is incorrect"); - $this->assertEquals("Invalid", $number->tendigit, "The tendigit value is incorrect"); - $this->assertEquals("Invalid", $number->elevendigit, "The elevendigit value is incorrect"); - $this->assertEquals("Invalid", $number->uri, "The uri value is incorrect"); - $this->assertEquals("Invalid", $number->nationalFormat, "The nationalFormat value is incorrect"); - $this->assertEquals("Invalid", $number->internationalFormat, "The internationalFormat value is incorrect"); - $this->assertEquals("Invalid", $number->npa, "The npa value is incorrect"); - $this->assertEquals("Invalid", $number->nxx, "The nxx value is incorrect"); - $this->assertEquals("Invalid", $number->line, "The line value is incorrect"); + $number = NanpNumberFormatter::format("(212) - 555 01**"); + $this->assertNotEmpty($number, "Formatter returned nothing when it should have returned an object"); + $this->assertEquals("(212) - 555 01** contains invalid characters", $number->errorMessage, "errorMessage is incorrect"); + $this->assertEquals(false, $number->isValid, "isValid is not false for an invalid number"); + $this->assertEquals("Invalid", $number->e164, "e164 is incorrect"); + $this->assertEquals("Invalid", $number->tendigit, "The tendigit value is incorrect"); + $this->assertEquals("Invalid", $number->elevendigit, "The elevendigit value is incorrect"); + $this->assertEquals("Invalid", $number->uri, "The uri value is incorrect"); + $this->assertEquals("Invalid", $number->dotFormat, "The dotFormat is incorrect"); + $this->assertEquals("Invalid", $number->hyphenFormat, "The hyphenFormat is incorrect"); + $this->assertEquals("Invalid", $number->nationalFormat, "The nationalFormat value is incorrect"); + $this->assertEquals("Invalid", $number->internationalFormat, "The internationalFormat value is incorrect"); + $this->assertEquals("Invalid", $number->npa, "The npa value is incorrect"); + $this->assertEquals("Invalid", $number->nxx, "The nxx value is incorrect"); + $this->assertEquals("Invalid", $number->line, "The line value is incorrect"); } public function testWildCards() { - $number = NanpNumberFormatter::format("(212) - 555 01**", true); - $this->assertNotEmpty($number, "Formatter returned nothing when it should have returned an object"); - $this->assertEquals("", $number->errorMessage, "errorMessage is incorrect"); - $this->assertEquals(true, $number->isValid, "isValid is not true for a valid number"); - $this->assertEquals("+121255501**", $number->e164, "e164 is incorrect"); - $this->assertEquals("21255501**", $number->tendigit, "The tendigit value is incorrect"); - $this->assertEquals("121255501**", $number->elevendigit, "The elevendigit value is incorrect"); - $this->assertEquals("tel:+121255501**", $number->uri, "The uri value is incorrect"); - $this->assertEquals("(212) 555-01**", $number->nationalFormat, "The nationalFormat value is incorrect"); - $this->assertEquals("+1 212 555 01**", $number->internationalFormat, "The internationalFormat value is incorrect"); - $this->assertEquals("212", $number->npa, "The npa value is incorrect"); - $this->assertEquals("555", $number->nxx, "The nxx value is incorrect"); - $this->assertEquals("01**", $number->line, "The line value is incorrect"); + $number = NanpNumberFormatter::format("(212) - 555 01**", true); + $this->assertNotEmpty($number, "Formatter returned nothing when it should have returned an object"); + $this->assertEquals("", $number->errorMessage, "errorMessage is incorrect"); + $this->assertEquals(true, $number->isValid, "isValid is not true for a valid number"); + $this->assertEquals("+121255501**", $number->e164, "e164 is incorrect"); + $this->assertEquals("21255501**", $number->tendigit, "The tendigit value is incorrect"); + $this->assertEquals("121255501**", $number->elevendigit, "The elevendigit value is incorrect"); + $this->assertEquals("tel:+121255501**", $number->uri, "The uri value is incorrect"); + $this->assertEquals("212.555.01**", $number->dotFormat, "The dotFormat is incorrect"); + $this->assertEquals("212-555-01**", $number->hyphenFormat, "The hyphenFormat is incorrect"); + $this->assertEquals("(212) 555-01**", $number->nationalFormat, "The nationalFormat value is incorrect"); + $this->assertEquals("+1 212 555 01**", $number->internationalFormat, "The internationalFormat value is incorrect"); + $this->assertEquals("212", $number->npa, "The npa value is incorrect"); + $this->assertEquals("555", $number->nxx, "The nxx value is incorrect"); + $this->assertEquals("01**", $number->line, "The line value is incorrect"); } }