diff --git a/lib/phone/nanp/ca/ab.ex b/lib/phone/nanp/ca/ab.ex index ce7ad94..1bb2e6b 100644 --- a/lib/phone/nanp/ca/ab.ex +++ b/lib/phone/nanp/ca/ab.ex @@ -1,6 +1,6 @@ defmodule Phone.NANP.CA.AB do use Helper.Area - field :regex, ~r/^(1)(403|780|587)([2-9].{6})$/ + field :regex, ~r/^(1)(403|780|587|825)([2-9].{6})$/ field :area_name, "Alberta" field :area_type, "province" field :area_abbreviation, "AB" diff --git a/lib/phone/nanp/ca/ns_pe.ex b/lib/phone/nanp/ca/ns_pe.ex index 6d4da18..209afc1 100644 --- a/lib/phone/nanp/ca/ns_pe.ex +++ b/lib/phone/nanp/ca/ns_pe.ex @@ -1,6 +1,6 @@ defmodule Phone.NANP.CA.NS_PE do use Helper.Area - field :regex, ~r/^(1)(902)([2-9].{6})$/ + field :regex, ~r/^(1)(902|782)([2-9].{6})$/ field :area_name, ["Nova Scotia","Prince Edward Island"] field :area_type, "provinces" field :area_abbreviation, ["NS","PE"] diff --git a/lib/phone/nanp/ca/on.ex b/lib/phone/nanp/ca/on.ex index 85bb2a3..db1bd42 100644 --- a/lib/phone/nanp/ca/on.ex +++ b/lib/phone/nanp/ca/on.ex @@ -1,6 +1,6 @@ defmodule Phone.NANP.CA.ON do use Helper.Area - field :regex, ~r/^(1)(226|249|289|343|365|416|437|519|613|647|705|807|905)([2-9].{6})$/ + field :regex, ~r/^(1)(226|249|289|343|365|416|437|519|548|613|647|705|807|905)([2-9].{6})$/ field :area_name, "Ontario" field :area_type, "province" field :area_abbreviation, "ON" diff --git a/lib/phone/nanp/gu.ex b/lib/phone/nanp/gu.ex index 74dcc79..ddea34a 100644 --- a/lib/phone/nanp/gu.ex +++ b/lib/phone/nanp/gu.ex @@ -1,6 +1,6 @@ defmodule Phone.NANP.GU do use Helper.Country - field :regex, ~r/^(1)(473)([2-9].{6})$/ + field :regex, ~r/^(1)(671)([2-9].{6})$/ field :country, "Guam" field :a2, "GU" field :a3, "GUM" diff --git a/lib/phone/nanp/pr.ex b/lib/phone/nanp/pr.ex index 258fc02..035b337 100644 --- a/lib/phone/nanp/pr.ex +++ b/lib/phone/nanp/pr.ex @@ -1,6 +1,6 @@ defmodule Phone.NANP.PR do use Helper.Country - field :regex, ~r/^(1)(787|393)([2-9].{6})$/ + field :regex, ~r/^(1)(787|939)([2-9].{6})$/ field :country, "Puerto Rico" field :a2, "PR" field :a3, "PRI" diff --git a/lib/phone/nanp/us/al.ex b/lib/phone/nanp/us/al.ex index 85f1fc4..c9a7092 100644 --- a/lib/phone/nanp/us/al.ex +++ b/lib/phone/nanp/us/al.ex @@ -1,6 +1,6 @@ defmodule Phone.NANP.US.AL do use Helper.Area - field :regex, ~r/^(1)(205|251|256|334)([2-9].{6})$/ + field :regex, ~r/^(1)(205|251|256|334|938)([2-9].{6})$/ field :area_name, "Alabama" field :area_type, "state" field :area_abbreviation, "AL" diff --git a/lib/phone/nanp/us/ca.ex b/lib/phone/nanp/us/ca.ex index 1f30a06..ebb0a2c 100644 --- a/lib/phone/nanp/us/ca.ex +++ b/lib/phone/nanp/us/ca.ex @@ -1,6 +1,6 @@ defmodule Phone.NANP.US.CA do use Helper.Area - field :regex, ~r/^(1)(209|213|310|323|408|415|424|510|530|559|562|619|626|650|661|707|714|760|805|818|831|858|909|916|925|949)([2-9].{6})$/ + field :regex, ~r/^(1)(209|213|310|323|408|415|424|442|510|530|559|562|619|626|628|650|657|661|669|707|714|747|760|805|818|831|858|909|916|925|949|951)([2-9].{6})$/ field :area_name, "California" field :area_type, "state" field :area_abbreviation, "CA" diff --git a/lib/phone/nanp/us/ct.ex b/lib/phone/nanp/us/ct.ex index 193ab74..afe7b29 100644 --- a/lib/phone/nanp/us/ct.ex +++ b/lib/phone/nanp/us/ct.ex @@ -1,6 +1,6 @@ defmodule Phone.NANP.US.CT do use Helper.Area - field :regex, ~r/^(1)(203|475|860)([2-9].{6})$/ + field :regex, ~r/^(1)(203|475|860|959)([2-9].{6})$/ field :area_name, "Connecticut" field :area_type, "state" field :area_abbreviation, "CT" diff --git a/lib/phone/nanp/us/il.ex b/lib/phone/nanp/us/il.ex index 1b5a3fe..513b302 100644 --- a/lib/phone/nanp/us/il.ex +++ b/lib/phone/nanp/us/il.ex @@ -1,6 +1,6 @@ defmodule Phone.NANP.US.IL do use Helper.Area - field :regex, ~r/^(1)(217|224|309|312|331|618|630|708|773|815|847|872)([2-9].{6})$/ + field :regex, ~r/^(1)(217|224|309|312|331|618|630|708|773|779|815|847|872)([2-9].{6})$/ field :area_name, "Illinois" field :area_type, "state" field :area_abbreviation, "IL" diff --git a/lib/phone/nanp/us/in.ex b/lib/phone/nanp/us/in.ex index 49e243a..87159b7 100644 --- a/lib/phone/nanp/us/in.ex +++ b/lib/phone/nanp/us/in.ex @@ -1,6 +1,6 @@ defmodule Phone.NANP.US.IN do use Helper.Area - field :regex, ~r/^(1)(219|260|317|574|765|812|930)([2-9].{6})$/ + field :regex, ~r/^(1)(219|260|317|463|574|765|812|930)([2-9].{6})$/ field :area_name, "Indiana" field :area_type, "state" field :area_abbreviation, "IN" diff --git a/lib/phone/nanp/us/nc.ex b/lib/phone/nanp/us/nc.ex index 75798bb..19430d4 100644 --- a/lib/phone/nanp/us/nc.ex +++ b/lib/phone/nanp/us/nc.ex @@ -1,6 +1,6 @@ defmodule Phone.NANP.US.NC do use Helper.Area - field :regex, ~r/^(1)(252|336|704|828|910|919|980|984)([2-9].{6})$/ + field :regex, ~r/^(1)(252|336|704|743|828|910|919|980|984)([2-9].{6})$/ field :area_name, "North Carolina" field :area_type, "state" field :area_abbreviation, "NC" diff --git a/lib/phone/nanp/us/ny.ex b/lib/phone/nanp/us/ny.ex index 5c92ab4..eb52dc0 100644 --- a/lib/phone/nanp/us/ny.ex +++ b/lib/phone/nanp/us/ny.ex @@ -1,6 +1,6 @@ defmodule Phone.NANP.US.NY do use Helper.Area - field :regex, ~r/^(1)(212|315|347|516|585|607|631|646|716|718|845|914|917|929)([2-9].{6})$/ + field :regex, ~r/^(1)(212|315|332|347|516|518|585|607|631|646|680|716|718|845|914|917|929|934)([2-9].{6})$/ field :area_name, "New York" field :area_type, "state" field :area_abbreviation, "NY" diff --git a/lib/phone/nanp/us/tx.ex b/lib/phone/nanp/us/tx.ex index c590f77..523f7e7 100644 --- a/lib/phone/nanp/us/tx.ex +++ b/lib/phone/nanp/us/tx.ex @@ -1,6 +1,6 @@ defmodule Phone.NANP.US.TX do use Helper.Area - field :regex, ~r/^(1)(210|214|254|281|325|346|361|409|430|432|469|512|682|713|806|817|830|832|903|915|936|940|956|972|979)([2-9].{6})$/ + field :regex, ~r/^(1)(210|214|254|281|325|346|361|409|430|432|469|512|682|713|737|806|817|830|832|903|915|936|940|956|972|979)([2-9].{6})$/ field :area_name, "Texas" field :area_type, "state" field :area_abbreviation, "TX" diff --git a/lib/phone/nanp/us/wv.ex b/lib/phone/nanp/us/wv.ex index a0cb98b..6ba9b18 100644 --- a/lib/phone/nanp/us/wv.ex +++ b/lib/phone/nanp/us/wv.ex @@ -1,6 +1,6 @@ defmodule Phone.NANP.US.WV do use Helper.Area - field :regex, ~r/^(1)(304)([2-9].{6})$/ + field :regex, ~r/^(1)(304|681)([2-9].{6})$/ field :area_name, "West Virginia" field :area_type, "state" field :area_abbreviation, "WV" diff --git a/test/phone/nanp_test.exs b/test/phone/nanp_test.exs new file mode 100644 index 0000000..bd6f268 --- /dev/null +++ b/test/phone/nanp_test.exs @@ -0,0 +1,20 @@ +defmodule Phone.NanpTest do + use ExUnit.Case, async: true + + @external_resource area_codes_path = Path.join([__DIR__, "..", "support", "nanp-area-codes.csv"]) + + for line <- File.stream!(area_codes_path, [], :line) do + [area_code, state_abbreviation] = line |> String.strip |> String.split(",") + + test "correctly parses NANP area code #{area_code} (#{state_abbreviation})" do + assert {:ok, result} = Phone.parse(unquote("1#{area_code}5551234")) + + case result do + %{a2: "US"} -> + assert result.area_abbreviation == unquote(state_abbreviation) + _ -> + true + end + end + end +end diff --git a/test/support/nanp-area-codes.csv b/test/support/nanp-area-codes.csv new file mode 100644 index 0000000..1283f3d --- /dev/null +++ b/test/support/nanp-area-codes.csv @@ -0,0 +1,382 @@ +403,AB +587,AB +780,AB +825,AB +264,AI +907,AK +205,AL +251,AL +256,AL +334,AL +938,AL +268,AN +479,AR +501,AR +870,AR +684,AS +480,AZ +520,AZ +602,AZ +623,AZ +928,AZ +242,BA +236,BC +250,BC +604,BC +778,BC +246,BD +441,BM +284,BV +209,CA +213,CA +310,CA +323,CA +408,CA +415,CA +424,CA +442,CA +510,CA +530,CA +559,CA +562,CA +619,CA +626,CA +628,CA +650,CA +657,CA +661,CA +669,CA +707,CA +714,CA +747,CA +760,CA +805,CA +818,CA +831,CA +858,CA +909,CA +916,CA +925,CA +949,CA +951,CA +303,CO +719,CO +720,CO +970,CO +345,CQ +203,CT +475,CT +860,CT +959,CT +202,DC +302,DE +767,DM +809,DR +829,DR +849,DR +239,FL +305,FL +321,FL +352,FL +386,FL +407,FL +561,FL +727,FL +754,FL +772,FL +786,FL +813,FL +850,FL +863,FL +904,FL +941,FL +954,FL +229,GA +404,GA +470,GA +478,GA +678,GA +706,GA +762,GA +770,GA +912,GA +473,GN +671,GU +808,HI +319,IA +515,IA +563,IA +641,IA +712,IA +208,ID +217,IL +224,IL +309,IL +312,IL +331,IL +618,IL +630,IL +708,IL +773,IL +779,IL +815,IL +847,IL +872,IL +219,IN +260,IN +317,IN +463,IN +574,IN +765,IN +812,IN +930,IN +876,JM +869,KA +316,KS +620,KS +785,KS +913,KS +270,KY +364,KY +502,KY +606,KY +859,KY +225,LA +318,LA +337,LA +504,LA +985,LA +339,MA +351,MA +413,MA +508,MA +617,MA +774,MA +781,MA +857,MA +978,MA +204,MB +431,MB +240,MD +301,MD +410,MD +443,MD +667,MD +207,ME +231,MI +248,MI +269,MI +313,MI +517,MI +586,MI +616,MI +734,MI +810,MI +906,MI +947,MI +989,MI +218,MN +320,MN +507,MN +612,MN +651,MN +763,MN +952,MN +314,MO +417,MO +573,MO +636,MO +660,MO +816,MO +228,MS +601,MS +662,MS +769,MS +406,MT +506,NB +902,NB +252,NC +336,NC +704,NC +743,NC +828,NC +910,NC +919,NC +980,NC +984,NC +701,ND +308,NE +402,NE +531,NE +709,NF +603,NH +201,NJ +551,NJ +609,NJ +732,NJ +848,NJ +856,NJ +862,NJ +908,NJ +973,NJ +505,NM +575,NM +670,NN +782,NS +902,NS +867,NT +702,NV +725,NV +775,NV +212,NY +315,NY +332,NY +347,NY +516,NY +518,NY +585,NY +607,NY +631,NY +646,NY +680,NY +716,NY +718,NY +845,NY +914,NY +917,NY +929,NY +934,NY +216,OH +220,OH +234,OH +330,OH +380,OH +419,OH +440,OH +513,OH +567,OH +614,OH +740,OH +937,OH +405,OK +539,OK +580,OK +918,OK +226,ON +249,ON +289,ON +343,ON +365,ON +416,ON +437,ON +519,ON +548,ON +613,ON +647,ON +705,ON +807,ON +905,ON +458,OR +503,OR +541,OR +971,OR +215,PA +267,PA +272,PA +412,PA +484,PA +570,PA +610,PA +717,PA +724,PA +814,PA +878,PA +782,PE +902,PE +343,PQ +418,PQ +438,PQ +450,PQ +514,PQ +579,PQ +581,PQ +613,PQ +819,PQ +873,PQ +787,PR +939,PR +401,RI +664,RT +758,SA +803,SC +843,SC +854,SC +864,SC +605,SD +721,SF +306,SK +639,SK +649,TC +423,TN +615,TN +629,TN +731,TN +865,TN +901,TN +931,TN +868,TR +210,TX +214,TX +254,TX +281,TX +325,TX +346,TX +361,TX +409,TX +430,TX +432,TX +469,TX +512,TX +682,TX +713,TX +737,TX +806,TX +817,TX +830,TX +832,TX +903,TX +915,TX +936,TX +940,TX +956,TX +972,TX +979,TX +385,UT +435,UT +801,UT +276,VA +434,VA +540,VA +571,VA +703,VA +757,VA +804,VA +340,VI +802,VT +867,VU +206,WA +253,WA +360,WA +425,WA +509,WA +262,WI +414,WI +534,WI +608,WI +715,WI +920,WI +304,WV +681,WV +307,WY +867,YT +784,ZF