diff --git a/javascript/README b/javascript/README index 47f8f169f..619a27805 100644 --- a/javascript/README +++ b/javascript/README @@ -25,7 +25,7 @@ pages with your web browser: How to update: ============== -The JavaScript library is ported from the Java implementation (revision 46). +The JavaScript library is ported from the Java implementation (revision 53). When the Java project gets updated follow these steps to update the JavaScript project: diff --git a/javascript/i18n/phonenumbers/asyoutypeformatter.js b/javascript/i18n/phonenumbers/asyoutypeformatter.js index 2db1f7f3a..1a944282b 100644 --- a/javascript/i18n/phonenumbers/asyoutypeformatter.js +++ b/javascript/i18n/phonenumbers/asyoutypeformatter.js @@ -622,6 +622,10 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype. /** @type {Array.} */ var m = nationalNumber.match(this.nationalPrefixForParsing_); if (m != null && m[0] != null && m[0].length > 0) { + // When the national prefix is detected, we use international formatting + // rules instead of national ones, because national formatting rules could + // contain local formatting rules for numbers entered without area code. + this.isInternationalFormatting_ = true; startOfNationalNumber = m[0].length; this.prefixBeforeNationalNumber_.append(nationalNumber.substring(0, startOfNationalNumber)); diff --git a/javascript/i18n/phonenumbers/metadata.js b/javascript/i18n/phonenumbers/metadata.js index 3cb88dd74..5c59612fd 100644 --- a/javascript/i18n/phonenumbers/metadata.js +++ b/javascript/i18n/phonenumbers/metadata.js @@ -293,7 +293,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"26848[01]\\d{4}","\\d{10}",,,"2684801234"] -,"AG",1,"011",,,,,,,,,,,,"268"] +,"AG",1,"011","1",,,"1",,,,,,,,"268"] ,"AI":[,[,,"[289]\\d{9}","\\d{7,10}"] ,[,,"2644(?:6[12]|9[78])\\d{4}","\\d{7,10}",,,"2644612345"] ,[,,"264(?:235|476|5(?:3[6-9]|8[1-4])|7(?:29|72))\\d{4}","\\d{10}",,,"2642351234"] @@ -302,7 +302,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"AI",1,"011",,,,,,,,,,,,"264"] +,"AI",1,"011","1",,,"1",,,,,,,,"264"] ,"AL":[,[,,"[2-57]\\d{7}|6\\d{8}|8\\d{5,7}|9\\d{5}","\\d{5,9}"] ,[,,"(?:2(?:[168][1-9]|[247]\\d|9[1-7])|3(?:1[1-3]|[2-6]\\d|[79][1-8]|8[1-9])|4\\d{2}|5(?:1[1-4]|[2-578]\\d|6[1-5]|9[1-7])|8(?:[19][1-5]|[2-6]\\d|[78][1-7]))\\d{5}","\\d{5,8}",,,"22345678"] ,[,,"6[6-9]\\d{7}","\\d{9}",,,"661234567"] @@ -321,24 +321,36 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ] ] -,"AM":[,[] -,[] -,[] -,[,,"NA","NA"] -,[,,"NA","NA"] -,[,,"NA","NA"] -,[,,"NA","NA"] +,"AM":[,[,,"[1-37-9]\\d{7}","\\d{5,8}"] +,[,,"(?:10\\d|2(?:2[2-46]|3[1-8]|4[2-69]|5[2-7]|6[1-9]|8[1-7])|3[12]2)\\d{5}","\\d{5,8}",,,"10123456"] +,[,,"(?:77|9[1-49])\\d{6}","\\d{8}",,,"77123456"] +,[,,"800\\d{5}","\\d{8}",,,"80012345"] +,[,,"90[016]\\d{5}","\\d{8}",,,"90012345"] +,[,,"80[1-4]\\d{5}","\\d{8}",,,"80112345"] ,[,,"NA","NA"] -,"AM",374,"00","8",,,"8",,,1] -,"AN":[,[] -,[] -,[] ,[,,"NA","NA"] +,"AM",374,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{6})","$1 $2",["[17]|9[1-49]"] +,"(0$1)",""] +,[,"(\\d{3})(\\d{5})","$1 $2",["[23]"] +,"(0$1)",""] +,[,"(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["8|90"] +,"0 $1",""] +] +] +,"AN":[,[,,"[13-79]\\d{6,7}","\\d{7,8}"] +,[,,"(?:318|5(?:25|4\\d|8[239])|7(?:1[578]|50)|9(?:[48]\\d{2}|50\\d|7(?:2[0-2]|[34]\\d|6[35-7]|77)))\\d{4}|416[0239]\\d{3}","\\d{7,8}",,,"7151234"] +,[,,"(?:318|5(?:1[01]|2[0-7]|5\\d|8[016-8])|7(0[01]|[89]\\d)|9(?:5(?:[1246]\\d|3[01])|6(?:[1679]\\d|3[01])))\\d{4}|416[15-8]\\d{3}","\\d{7,8}",,,"3181234"] ,[,,"NA","NA"] ,[,,"NA","NA"] +,[,,"(?:10|69)\\d{5}","\\d{7,8}",,,"1011234"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"AN",599,"00",,,,,,,1] +,"AN",599,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[13-7]"] +,"",""] +,[,"(9)(\\d{3})(\\d{4})","$1 $2 $3",["9"] +,"",""] +] +] ,"AO":[,[,,"[29]\\d{8}","\\d{9}"] ,[,,"2\\d(?:[26-9]\\d|\\d[26-9])\\d{5}","\\d{9}",,,"222123456"] ,[,,"9[1-3]\\d{7}","\\d{9}",,,"923123456"] @@ -397,7 +409,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"AS",1,"011",,,,,,,,,,,,"684"] +,"AS",1,"011","1",,,"1",,,,,,,,"684"] ,"AT":[,[,,"\\d{4,13}","\\d{3,13}"] ,[,,"1\\d{3,12}|(?:2(?:1[467]|2[134-8]|5[2357]|6[1-46-8]|7[1-8]|8[124-7]|8[1458])|3(?:1[1-8]|3[23568]|4[5-7]|5[1378]|6[1-38]|8[3-68])|4(?:2[1-8]|35|63|7[1368]|8[2457])|5(?:1[27]|2[1-8]|3[357]|4[147]|5[12578]|6[37])|6(?:13|2[1-47]|4[1-35-8]|5[468]|62)|7(?:2[1-8]|3[25]|4[13478]|5[68]|6[16-8]|7[1-6]|9[45]))\\d{3,10}|5(?:0[1-9]|[79]\\d)\\d{2,10}|720\\d{6,10}","\\d{3,13}",,,"1234567890"] ,[,,"6(?:44|5[0-3579]|6[013-9]|[7-9]\\d)\\d{4,10}","\\d{7,13}",,,"644123456"] @@ -480,7 +492,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"BB",1,"011",,,,,,,,,,,,"246"] +,"BB",1,"011","1",,,"1",,,,,,,,"246"] ,"BD":[,[,,"[2-79]\\d{5,9}|1\\d{9}|8[0-7]\\d{4,8}","\\d{6,10}"] ,[,,"2(?:7\\d1|8(?:[026]1|[1379][1-5]|8[1-8])|9(?:0[0-2]|1[1-4]|3[3-5]|5[56]|6[67]|71|8[078]))\\d{4}|3(?:[6-8]1|(?:0[23]|[25][12]|82|416)\\d|(?:31|12?[5-7])\\d{2})\\d{3}|4(?:(?:02|[49]6|[68]1)|(?:0[13]|21\\d?|[23]2|[457][12]|6[28])\\d|(?:23|[39]1)\\d{2}|1\\d{3})\\d{3}|5(?:(?:[457-9]1|62)|(?:1\\d?|2[12]|3[1-3]|52)\\d|61{2})|6(?:[45]1|(?:11|2[15]|[39]1)\\d|(?:[06-8]1|62)\\d{2})|7(?:(?:32|91)|(?:02|31|[67][12])\\d|[458]1\\d{2}|21\\d{3})\\d{3}|8(?:(?:4[12]|[5-7]2|1\\d?)|(?:0|3[12]|[5-7]1|217)\\d)\\d{4}|9(?:[35]1|(?:[024]2|81)\\d|(?:1|[24]1)\\d{2})\\d{3}","\\d{6,9}",,,"27111234"] ,[,,"(?:1[13-9]\\d|(?:3[78]|44)[02-9]|6(?:44|6[02-9]))\\d{7}","\\d{10}",,,"1812345678"] @@ -519,7 +531,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"BF":[,[,,"[2457]\\d{7}","\\d{8}"] ,[,,"(?:20(?:49|5[23]|9[016-9])|40(?:4[569]|55|7[0179])|50[34]\\d)\\d{4}","\\d{8}",,,"20491234"] -,[,,"7(?:[04-6]\\d|1[0-489]|2[0-8]|8[013-9]|90)\\d{5}","\\d{8}",,,"70123456"] +,[,,"7(?:[024-6]\\d|1[0-489]|8[013-9]|90)\\d{5}","\\d{8}",,,"70123456"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -546,15 +558,17 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ] ] -,"BH":[,[] -,[] -,[] +,"BH":[,[,,"[1367]\\d{7}","\\d{8}"] +,[,,"(?:1(?:3[3-6]|6[0156]|7\\d)|6(?:1[16]|6[03469]|9[69])|77\\d)\\d{5}","\\d{8}",,,"17001234"] +,[,,"(?:3(?:[369]\\d|77|8[38])|6(?:1[16]|6[03469]|9[69])|77\\d)\\d{5}","\\d{8}",,,"36001234"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"BH",973,"00",,,,,,,1] +,"BH",973,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",,"",""] +] +] ,"BI":[,[,,"[27]\\d{7}","\\d{8}"] ,[,,"22(?:2[0-7]|[3-5]0)\\d{4}","\\d{8}",,,"22201234"] ,[,,"(?:29\\d|7(?:1[1-3]|[4-9]\\d))\\d{5}","\\d{8}",,,"79561234"] @@ -594,7 +608,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"BM",1,"011",,,,,,,,,,,,"441"] +,"BM",1,"011","1",,,"1",,,,,,,,"441"] ,"BN":[,[,,"[2-578]\\d{6}","\\d{7}"] ,[,,"[2-5]\\d{6}","\\d{7}",,,"2345678"] ,[,,"[78]\\d{6}","\\d{7}",,,"7123456"] @@ -639,7 +653,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"BS",1,"011",,,,,,,,,,,,"242"] +,"BS",1,"011","1",,,"1",,,,,,,,"242"] ,"BT":[,[,,"(?:17|[2-8])\\d{6}","\\d{6,8}"] ,[,,"(?:2[3-6]|[34][5-7]|5[236]|6[2-46]|7[246]|8[2-4])\\d{5}","\\d{6,7}",,,"2345678"] ,[,,"17\\d{6}","\\d{8}",,,"17123456"] @@ -699,7 +713,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"CA",1,"011"] +,"CA",1,"011","1",,,"1"] ,"CD":[,[,,"[89]\\d{8}|[1-6]\\d{6}","\\d{7,9}"] ,[,,"[1-6]\\d{6}","\\d{7}",,,"1234567"] ,[,,"(?:8[0149]|9[7-9])\\d{7}","\\d{9}",,,"991234567"] @@ -818,6 +832,8 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"400\\d{7}","\\d{10}",,,"4001234567"] ,"CN",86,"00","0",,,"0",,,,[[,"(80\\d{2})(\\d{4})","$1 $2",["80[2678]"] ,"0$1",""] +,[,"([48]00)(\\d{3})(\\d{4})","$1 $2 $3",["[48]00"] +,"",""] ,[,"(\\d{3,4})(\\d{4})","$1 $2",["[2-9]"] ,"",""] ,[,"(21)(\\d{4})(\\d{4,6})","$1 $2 $3",["21"] @@ -830,8 +846,6 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ,[,"(1[3-58]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["1[3-58]"] ,"",""] -,[,"([48]00)(\\d{3})(\\d{4})","$1 $2 $3",["[48]00"] -,"",""] ,[,"(10800)(\\d{3})(\\d{4})","$1 $2 $3",["108","1080","10800"] ,"",""] ] @@ -969,7 +983,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"DM",1,"011",,,,,,,,,,,,"767"] +,"DM",1,"011","1",,,"1",,,,,,,,"767"] ,"DO":[,[,,"[89]\\d{9}","\\d{7,10}"] ,[,,"8[024]9[2-9]\\d{6}","\\d{7,10}",,,"8092345678"] ,[,,"8[024]9[2-9]\\d{6}","\\d{7,10}",,,"8092345678"] @@ -978,7 +992,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"DO",1,"011",,,,,,,1,,,,,"8[024]9"] +,"DO",1,"011","1",,,"1",,,1,,,,,"8[024]9"] ,"DZ":[,[,,"(?:[1-4]|[5-9]\\d)\\d{7}","\\d{8,9}"] ,[,,"(?:1\\d|2[014-79]|3[0-8]|4[0135689])\\d{6}|9619\\d{5}","\\d{8,9}",,,"12345678"] ,[,,"(?:5[56]|6[69]|7[79])\\d{7}","\\d{9}",,,"551234567"] @@ -1125,8 +1139,8 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"[1-5]\\d{8}","\\d{9}",,,"123456789"] ,[,,"6\\d{8}|7[5-9]\\d{7}","\\d{9}",,,"612345678"] ,[,,"80\\d{7}","\\d{9}",,,"801234567"] -,[,,"8(?:1[01]|2[0156]|84|9[0-37-9])\\d{6}","\\d{9}",,,"810123456"] -,[,,"NA","NA"] +,[,,"89[1-37-9]\\d{6}","\\d{9}",,,"891123456"] +,[,,"8(?:1[019]|2[0156]|84|90)\\d{6}","\\d{9}",,,"810123456"] ,[,,"NA","NA"] ,[,,"9\\d{8}","\\d{9}",,,"912345678"] ,"FR",33,"[04579]0","0",,,"0",,"00",,[[,"([1-79])(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["[1-79]"] @@ -1150,7 +1164,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ] ,"GB":[,[,,"\\d{7,10}","\\d{6,10}"] -,[,,"1(?:1[3-8]|[2-69]1)\\d{7}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|8[02-9]|9[0-9])|3(?:0\\d|[25][02-9]|3[02-579]|4[0-56-9]|[68][0-46-9]|7[1-35-79]|9[24578])|4(?:0[03-9]|2[02-57-9]|[37]\\d|4[02-69]|5[0-8]|[69][0-79]|8[02-9])|5(?:0[1-35-9]|2[024-9]|3[015689]|4[02-9]|[57][03-9]|6\\d|8[0-68]|9[0-57-9])|6(?:0[034689]|2[035689]|3[13-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|8[013-9]|9[0-24578])|7(?:0[0246-9]|2\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[13-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\d|8[2-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|8\\d|9[2-57]))\\d{5,6}|(?:2[03489]|3[0347]|55)\\d{8}","\\d{6,10}",,,"1212345678"] +,[,,"1(?:1[3-8]|[2-69]1)\\d{7}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|8[02-9]|9[0-9])|3(?:0\\d|[25][02-9]|3[02-579]|4[0-56-9]|[68][0-46-9]|7[1-35-79]|9[24578])|4(?:0[03-9]|2[02-57-9]|[37]\\d|4[02-69]|5[0-8]|[69][0-79]|8[02-9])|5(?:0[1-35-9]|2[024-9]|3[015689]|4[02-9]|[57][03-9]|6\\d|8[0-68]|9[0-57-9])|6(?:0[034689]|2[0-35689]|3[13-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|8[013-9]|9[0-24578])|7(?:0[0246-9]|2\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[13-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\d|8[2-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|8\\d|9[2-57]))\\d{5,6}|(?:2[03489]|3[0347]|55)\\d{8}","\\d{6,10}",,,"1212345678"] ,[,,"7(?:4[0-26]\\d|5(?:[013-9]\\d|2[0-35-9])|7(?:0[1-9]|8[02-9]|9[0-689]|[1-7]\\d)|8(?:[014-9]\\d|[23][0-8])|9(?:1[02-9]|2[0135-9]|3[0-689]|[04-9]\\d))\\d{6}","\\d{10}",,,"7400123456"] ,[,,"80(?:01111|\\d{7,8})|500\\d{6}","\\d{7,10}",,,"8012345678"] ,[,,"(?:9[018]\\d|87[1-3])\\d{7}","\\d{10}",,,"9012345678"] @@ -1183,7 +1197,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"GD",1,"011",,,,,,,,,,,,"473"] +,"GD",1,"011","1",,,"1",,,,,,,,"473"] ,"GE":[,[,,"[1-3579]\\d{7}|8\\d{8}","\\d{3,9}"] ,[,,"(?:122|2(?:22|36|5[03])|3(?:1[0-35-8]|[24-6]\\d|3[1-35679]|7[0-39]|9[1-35-7])|44[2-6])\\d{5}","\\d{3,8}",,,"32123456"] ,[,,"(?:5[1578]|6[28]|7[0147-9]|9[0135-9])\\d{6}","\\d{8}",,,"55123456"] @@ -1242,15 +1256,17 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,"GI",350,"00",,,,,,,1] -,"GL":[,[] -,[] -,[] -,[,,"NA","NA"] +,"GL":[,[,,"[1-689]\\d{5}","\\d{6}"] +,[,,"(?:19|3[1-6]|6[14689]|8[14-79]|9\\d)\\d{4}","\\d{6}",,,"321000"] +,[,,"[245][2-9]\\d{4}","\\d{6}",,,"221234"] +,[,,"80\\d{4}","\\d{6}",,,"801234"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,[,,"NA","NA"] -,"GL",299,"00",,,,,,,1] +,[,,"3[89]\\d{4}","\\d{6}",,,"381234"] +,"GL",299,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",,"",""] +] +] ,"GM":[,[,,"[3-9]\\d{6}","\\d{7}"] ,[,,"(4(?:[23]\\d{2}|4(?:1[024679]|[6-9]\\d))|5(?:54[0-7]|6(?:[67]\\d)|7(?:1[04]|2[035]|3[58]|48))|8\\d{3})\\d{3}","\\d{7}",,,"5661234"] ,[,,"[3679]\\d{6}","\\d{7}",,,"3012345"] @@ -1331,7 +1347,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"GU",1,"011",,,,,,,1,,,,,"671"] +,"GU",1,"011","1",,,"1",,,1,,,,,"671"] ,"GW":[,[,,"[3567]\\d{6}","\\d{7}"] ,[,,"3(?:2[0125]|3[1245]|4[12]|5[1-4]|70|9[1-467])\\d{4}","\\d{7}",,,"3201234"] ,[,,"[5-7]\\d{6}","\\d{7}",,,"5012345"] @@ -1584,15 +1600,17 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ] ] -,"IS":[,[] -,[] -,[] -,[,,"NA","NA"] -,[,,"NA","NA"] -,[,,"NA","NA"] +,"IS":[,[,,"[4-9]\\d{6}","\\d{7}"] +,[,,"(?:4(?:1[0-245]|2[0-7]|[37][0-8]|4[0245]|5[0-356]|6\\d|8[0-46-8]|9[013-79])|5(?:05|[156]\\d|2[02578]|3[013-6]|4[03-6]|7[0-2578]|8[0-25-9]|9[013-689])|87[23])\\d{4}","\\d{7}",,,"4101234"] +,[,,"(?:6(?:1[014-8]|2[0-8]|3[0-27-9]|4[0-29]|5[029]|[67][0-69]|[89]\\d)|7(?:5[057]|7[0-7])|8(?:2[0-5]|[469]\\d|5[1-9]))\\d{4}","\\d{7}",,,"6101234"] +,[,,"800\\d{4}","\\d{7}",,,"8001234"] +,[,,"90\\d{5}","\\d{7}",,,"9011234"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"IS",354,"00","0",,,"0",,,1] +,[,,"49[013-79]\\d{4}","\\d{7}",,,"4931234"] +,"IS",354,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"",""] +] +] ,"IT":[,[,,"[01389]\\d{5,10}","\\d{6,11}"] ,[,,"0\\d{7,10}","\\d{8,11}",,,"0212345678"] ,[,,"3\\d{8,9}","\\d{9,10}",,,"312345678"] @@ -1638,7 +1656,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"JM",1,"011",,,,,,,,,,,,"876"] +,"JM",1,"011","1",,,"1",,,,,,,,"876"] ,"JO":[,[,,"[235-9]\\d{7,8}","\\d{7,9}"] ,[,,"[2356][2-8]\\d{6}","\\d{7,8}",,,"62345678"] ,[,,"7(?:4[5-7]|55|7[5-79]|8[5-8]|9[05-9])\\d{6}","\\d{9}",,,"790123456"] @@ -1751,7 +1769,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"KN",1,"011",,,,,,,,,,,,"869"] +,"KN",1,"011","1",,,"1",,,,,,,,"869"] ,"KP":[,[] ,[] ,[] @@ -1813,7 +1831,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"KY",1,"011",,,,,,,,,,,,"345"] +,"KY",1,"011","1",,,"1",,,,,,,,"345"] ,"KZ":[,[,,"(?:[67]\\d{2}|80[09])\\d{7}","\\d{10}"] ,[,,"7(?:1\\d[2-7]|2(?:[0-689][2-7]|75[279]))\\d{6}","\\d{10}",,,"7123456789"] ,[,,"7(?:(?:(?:1[2-578]|2[13-7])9[01]|2758)\\d{5}|(?:0[0-257]|6[02-4]|7[57])\\d{7})|6\\{9}","\\d{10}",,,"7129012345"] @@ -1863,7 +1881,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"LC",1,"011",,,,,,,,,,,,"758"] +,"LC",1,"011","1",,,"1",,,,,,,,"758"] ,"LI":[,[,,"(?:66|80|90)\\d{7}|[237-9]\\d{6}","\\d{7,9}"] ,[,,"(?:2(?:17|3\\d|6[02-58]|96)|3(?:02|7[01357]|8[048]|9[0269])|870)\\d{4}","\\d{7}",,,"2345678"] ,[,,"66(?:[0178][0-4]|2[025-9]|[36]\\d|4[129]|5[45]|9[019])\\d{5}|7(?:4[2-59]|56|[6-9]\\d)\\d{4}","\\d{7,9}",,,"661234567"] @@ -2128,7 +2146,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"MP",1,"011",,,,,,,1,,,,,"670"] +,"MP",1,"011","1",,,"1",,,1,,,,,"670"] ,"MQ":[,[] ,[] ,[] @@ -2157,7 +2175,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"MS",1,"011",,,,,,,,,,,,"664"] +,"MS",1,"011","1",,,"1",,,,,,,,"664"] ,"MT":[,[] ,[] ,[] @@ -2536,7 +2554,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"3(?:0\\d|1[2-5]|2[1-3]|3[1-6]|4[2-6]|64)\\d{7}","\\d{10}",,,"3012345678"] ,[,,"800\\d{5}","\\d{8}",,,"80012345"] ,[,,"900\\d{5}","\\d{8}",,,"90012345"] -,[,,"(?:2(?:[125]|3[2358]|4[2-4]|9[2-8])|4(?:[0-246-9]|5[3479])|5(?:[1-35-7]|4[2-467]|8[126])|6(?:[1-8]|0[468])|7(?:[14]|2[236])|8(?:[16]|2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|22|3[27-9]|4[2-6]|6[3569]|9[2-7]))111\\d{6}","\\d{11,12}",,,"21111825888"] +,[,,"(?:2(?:[125]|3[2358]|4[2-4]|9[2-8])|4(?:[0-246-9]|5[3479])|5(?:[1-35-7]|4[2-467])|6(?:[1-8]|0[468])|7(?:[14]|2[236])|8(?:[16]|2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|22|3[27-9]|4[2-6]|6[3569]|9[2-7]))111\\d{6}","\\d{11,12}",,,"21111825888"] ,[,,"122\\d{6}","\\d{9}",,,"122044444"] ,[,,"NA","NA"] ,"PK",92,"00","0",,,"0",,,,[[,"(\\d{2})(111)(\\d{3})(\\d{3})","$1 $2 $3 $4",["(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)1","(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)11","(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)111"] @@ -2588,7 +2606,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"PR",1,"011",,,,,,,1,,,,,"787|939"] +,"PR",1,"011","1",,,"1",,,1,,,,,"787|939"] ,"PS":[,[] ,[] ,[] @@ -2645,8 +2663,8 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"262\\d{6}","\\d{9}",,,"262161234"] ,[,,"6(?:9[23]|47)\\d{6}","\\d{9}",,,"692123456"] ,[,,"80\\d{7}","\\d{9}",,,"801234567"] -,[,,"8(?:1[01]|2[0156]|84|9[0-37-9])\\d{6}","\\d{9}",,,"810123456"] -,[,,"NA","NA"] +,[,,"89[1-37-9]\\d{6}","\\d{9}",,,"891123456"] +,[,,"8(?:1[019]|2[0156]|84|90)\\d{6}","\\d{9}",,,"810123456"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,"RE",262,"00","0",,,"0",,,,[[,"([268]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"0$1",""] @@ -2956,7 +2974,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"64971[01]\\d{4}","\\d{10}",,,"6497101234"] -,"TC",1,"011",,,,,,,,,,,,"649"] +,"TC",1,"011","1",,,"1",,,,,,,,"649"] ,"TD":[,[,,"[2679]\\d{7}","\\d{8}"] ,[,,"22(?:[3789]0|5[0-5]|6[89])\\d{4}","\\d{8}",,,"22501234"] ,[,,"(?:6(?:3[0-7]|6\\d)|77\\d|9(?:5[0-4]|9\\d))\\d{5}","\\d{8}",,,"63012345"] @@ -3094,7 +3112,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"TT",1,"011",,,,,,,,,,,,"868"] +,"TT",1,"011","1",,,"1",,,,,,,,"868"] ,"TV":[,[] ,[] ,[] @@ -3219,7 +3237,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"VC",1,"011",,,,,,,,,,,,"784"] +,"VC",1,"011","1",,,"1",,,,,,,,"784"] ,"VE":[,[,,"[24589]\\d{9}","\\d{7,10}"] ,[,,"(?:2(?:12|3[457-9]|[58][1-9]|[467]\\d|9[1-6])|50[01])\\d{7}","\\d{7,10}",,,"2121234567"] ,[,,"4(?:1[24-8]|2[46])\\d{7}","\\d{10}",,,"4121234567"] @@ -3239,7 +3257,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"VG",1,"011",,,,,,,,,,,,"284"] +,"VG",1,"011","1",,,"1",,,,,,,,"284"] ,"VI":[,[,,"340(?:6[49]2|7[17]\\d)\\d{4}|(?:8(?:00|66|77|88)|900)[2-9]\\d{6}","\\d{7,10}"] ,[,,"340(?:6[49]2|7[17]\\d)\\d{4}|(?:8(?:00|66|77|88)|900)[2-9]\\d{6}","\\d{7,10}",,,"3406421234"] ,[,,"340(?:6[49]2|7[17]\\d)\\d{4}|(?:8(?:00|66|77|88)|900)[2-9]\\d{6}","\\d{7,10}",,,"3406421234"] @@ -3248,7 +3266,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"VI",1,"011",,,,,,,1,,,,,"340"] +,"VI",1,"011","1",,,"1",,,1,,,,,"340"] ,"VN":[,[,,"8\\d{5,8}|[1-79]\\d{7,9}","\\d{7,10}"] ,[,,"(?:2(?:[025-79]|1[0189]|[348][01])|3(?:[0136-9]|[25][01])|[48]\\d|5(?:[01][01]|[2-9])|6(?:[0-46-8]|5[01])|7(?:[02-79]|[18][01]))\\d{7}|69\\d{5,6}|80\\d{5}","\\d{7,10}",,,"2101234567"] ,[,,"(?:9\\d|1(?:2[1-35-9]|6[3-9]|99))\\d{7}","\\d{9,10}",,,"912345678"] diff --git a/javascript/i18n/phonenumbers/metadatafortesting.js b/javascript/i18n/phonenumbers/metadatafortesting.js index 3abc4d795..5fb2be209 100644 --- a/javascript/i18n/phonenumbers/metadatafortesting.js +++ b/javascript/i18n/phonenumbers/metadatafortesting.js @@ -70,7 +70,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"AO",244,"00",,,,,,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,"",""] +,"AO",244,"00","0~0",,,"0~0",,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,"",""] ] ] ,"AR":[,[,,"[1-3689]\\d{9,10}","\\d{6,11}"] @@ -126,7 +126,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"BS",1,"011"] +,"BS",1,"011","1",,,"1"] ,"DE":[,[,,"\\d{4,14}","\\d{2,14}"] ,[,,"(?:[24-6]\\d{2}|3[03-9]\\d|[789](?:[1-9]\\d|0[2-9]))\\d{3,8}","\\d{2,14}",,,"30123456"] ,[,,"1(5\\d{9}|7\\d{8}|6[02]\\d{8}|63\\d{7})","\\d{10,11}"] diff --git a/javascript/i18n/phonenumbers/metadatalite.js b/javascript/i18n/phonenumbers/metadatalite.js index 1d7882b7a..f1d9af34b 100644 --- a/javascript/i18n/phonenumbers/metadatalite.js +++ b/javascript/i18n/phonenumbers/metadatalite.js @@ -293,7 +293,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"26848[01]\\d{4}","\\d{10}"] -,"AG",1,"011",,,,,,,,,,,,"268"] +,"AG",1,"011","1",,,"1",,,,,,,,"268"] ,"AI":[,[,,"[289]\\d{9}","\\d{7,10}"] ,[,,"2644(?:6[12]|9[78])\\d{4}","\\d{7,10}"] ,[,,"264(?:235|476|5(?:3[6-9]|8[1-4])|7(?:29|72))\\d{4}","\\d{10}"] @@ -302,7 +302,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"AI",1,"011",,,,,,,,,,,,"264"] +,"AI",1,"011","1",,,"1",,,,,,,,"264"] ,"AL":[,[,,"[2-57]\\d{7}|6\\d{8}|8\\d{5,7}|9\\d{5}","\\d{5,9}"] ,[,,"(?:2(?:[168][1-9]|[247]\\d|9[1-7])|3(?:1[1-3]|[2-6]\\d|[79][1-8]|8[1-9])|4\\d{2}|5(?:1[1-4]|[2-578]\\d|6[1-5]|9[1-7])|8(?:[19][1-5]|[2-6]\\d|[78][1-7]))\\d{5}","\\d{5,8}"] ,[,,"6[6-9]\\d{7}","\\d{9}"] @@ -321,24 +321,36 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ] ] -,"AM":[,[] -,[] -,[] -,[,,"NA","NA"] -,[,,"NA","NA"] -,[,,"NA","NA"] -,[,,"NA","NA"] +,"AM":[,[,,"[1-37-9]\\d{7}","\\d{5,8}"] +,[,,"(?:10\\d|2(?:2[2-46]|3[1-8]|4[2-69]|5[2-7]|6[1-9]|8[1-7])|3[12]2)\\d{5}","\\d{5,8}"] +,[,,"(?:77|9[1-49])\\d{6}","\\d{8}"] +,[,,"800\\d{5}","\\d{8}"] +,[,,"90[016]\\d{5}","\\d{8}"] +,[,,"80[1-4]\\d{5}","\\d{8}"] ,[,,"NA","NA"] -,"AM",374,"00","8",,,"8",,,1] -,"AN":[,[] -,[] -,[] ,[,,"NA","NA"] +,"AM",374,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{6})","$1 $2",["[17]|9[1-49]"] +,"(0$1)",""] +,[,"(\\d{3})(\\d{5})","$1 $2",["[23]"] +,"(0$1)",""] +,[,"(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["8|90"] +,"0 $1",""] +] +] +,"AN":[,[,,"[13-79]\\d{6,7}","\\d{7,8}"] +,[,,"(?:318|5(?:25|4\\d|8[239])|7(?:1[578]|50)|9(?:[48]\\d{2}|50\\d|7(?:2[0-2]|[34]\\d|6[35-7]|77)))\\d{4}|416[0239]\\d{3}","\\d{7,8}"] +,[,,"(?:318|5(?:1[01]|2[0-7]|5\\d|8[016-8])|7(0[01]|[89]\\d)|9(?:5(?:[1246]\\d|3[01])|6(?:[1679]\\d|3[01])))\\d{4}|416[15-8]\\d{3}","\\d{7,8}"] ,[,,"NA","NA"] ,[,,"NA","NA"] +,[,,"(?:10|69)\\d{5}","\\d{7,8}"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"AN",599,"00",,,,,,,1] +,"AN",599,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[13-7]"] +,"",""] +,[,"(9)(\\d{3})(\\d{4})","$1 $2 $3",["9"] +,"",""] +] +] ,"AO":[,[,,"[29]\\d{8}","\\d{9}"] ,[,,"2\\d(?:[26-9]\\d|\\d[26-9])\\d{5}","\\d{9}"] ,[,,"9[1-3]\\d{7}","\\d{9}"] @@ -397,7 +409,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"AS",1,"011",,,,,,,,,,,,"684"] +,"AS",1,"011","1",,,"1",,,,,,,,"684"] ,"AT":[,[,,"\\d{4,13}","\\d{3,13}"] ,[,,"1\\d{3,12}|(?:2(?:1[467]|2[134-8]|5[2357]|6[1-46-8]|7[1-8]|8[124-7]|8[1458])|3(?:1[1-8]|3[23568]|4[5-7]|5[1378]|6[1-38]|8[3-68])|4(?:2[1-8]|35|63|7[1368]|8[2457])|5(?:1[27]|2[1-8]|3[357]|4[147]|5[12578]|6[37])|6(?:13|2[1-47]|4[1-35-8]|5[468]|62)|7(?:2[1-8]|3[25]|4[13478]|5[68]|6[16-8]|7[1-6]|9[45]))\\d{3,10}|5(?:0[1-9]|[79]\\d)\\d{2,10}|720\\d{6,10}","\\d{3,13}"] ,[,,"6(?:44|5[0-3579]|6[013-9]|[7-9]\\d)\\d{4,10}","\\d{7,13}"] @@ -480,7 +492,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"BB",1,"011",,,,,,,,,,,,"246"] +,"BB",1,"011","1",,,"1",,,,,,,,"246"] ,"BD":[,[,,"[2-79]\\d{5,9}|1\\d{9}|8[0-7]\\d{4,8}","\\d{6,10}"] ,[,,"2(?:7\\d1|8(?:[026]1|[1379][1-5]|8[1-8])|9(?:0[0-2]|1[1-4]|3[3-5]|5[56]|6[67]|71|8[078]))\\d{4}|3(?:[6-8]1|(?:0[23]|[25][12]|82|416)\\d|(?:31|12?[5-7])\\d{2})\\d{3}|4(?:(?:02|[49]6|[68]1)|(?:0[13]|21\\d?|[23]2|[457][12]|6[28])\\d|(?:23|[39]1)\\d{2}|1\\d{3})\\d{3}|5(?:(?:[457-9]1|62)|(?:1\\d?|2[12]|3[1-3]|52)\\d|61{2})|6(?:[45]1|(?:11|2[15]|[39]1)\\d|(?:[06-8]1|62)\\d{2})|7(?:(?:32|91)|(?:02|31|[67][12])\\d|[458]1\\d{2}|21\\d{3})\\d{3}|8(?:(?:4[12]|[5-7]2|1\\d?)|(?:0|3[12]|[5-7]1|217)\\d)\\d{4}|9(?:[35]1|(?:[024]2|81)\\d|(?:1|[24]1)\\d{2})\\d{3}","\\d{6,9}"] ,[,,"(?:1[13-9]\\d|(?:3[78]|44)[02-9]|6(?:44|6[02-9]))\\d{7}","\\d{10}"] @@ -519,7 +531,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"BF":[,[,,"[2457]\\d{7}","\\d{8}"] ,[,,"(?:20(?:49|5[23]|9[016-9])|40(?:4[569]|55|7[0179])|50[34]\\d)\\d{4}","\\d{8}"] -,[,,"7(?:[04-6]\\d|1[0-489]|2[0-8]|8[013-9]|90)\\d{5}","\\d{8}"] +,[,,"7(?:[024-6]\\d|1[0-489]|8[013-9]|90)\\d{5}","\\d{8}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -546,15 +558,17 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ] ] -,"BH":[,[] -,[] -,[] +,"BH":[,[,,"[1367]\\d{7}","\\d{8}"] +,[,,"(?:1(?:3[3-6]|6[0156]|7\\d)|6(?:1[16]|6[03469]|9[69])|77\\d)\\d{5}","\\d{8}"] +,[,,"(?:3(?:[369]\\d|77|8[38])|6(?:1[16]|6[03469]|9[69])|77\\d)\\d{5}","\\d{8}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"BH",973,"00",,,,,,,1] +,"BH",973,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",,"",""] +] +] ,"BI":[,[,,"[27]\\d{7}","\\d{8}"] ,[,,"22(?:2[0-7]|[3-5]0)\\d{4}","\\d{8}"] ,[,,"(?:29\\d|7(?:1[1-3]|[4-9]\\d))\\d{5}","\\d{8}"] @@ -594,7 +608,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"BM",1,"011",,,,,,,,,,,,"441"] +,"BM",1,"011","1",,,"1",,,,,,,,"441"] ,"BN":[,[,,"[2-578]\\d{6}","\\d{7}"] ,[,,"[2-5]\\d{6}","\\d{7}"] ,[,,"[78]\\d{6}","\\d{7}"] @@ -639,7 +653,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"BS",1,"011",,,,,,,,,,,,"242"] +,"BS",1,"011","1",,,"1",,,,,,,,"242"] ,"BT":[,[,,"(?:17|[2-8])\\d{6}","\\d{6,8}"] ,[,,"(?:2[3-6]|[34][5-7]|5[236]|6[2-46]|7[246]|8[2-4])\\d{5}","\\d{6,7}"] ,[,,"17\\d{6}","\\d{8}"] @@ -699,7 +713,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"CA",1,"011"] +,"CA",1,"011","1",,,"1"] ,"CD":[,[,,"[89]\\d{8}|[1-6]\\d{6}","\\d{7,9}"] ,[,,"[1-6]\\d{6}","\\d{7}"] ,[,,"(?:8[0149]|9[7-9])\\d{7}","\\d{9}"] @@ -818,6 +832,8 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"400\\d{7}","\\d{10}"] ,"CN",86,"00","0",,,"0",,,,[[,"(80\\d{2})(\\d{4})","$1 $2",["80[2678]"] ,"0$1",""] +,[,"([48]00)(\\d{3})(\\d{4})","$1 $2 $3",["[48]00"] +,"",""] ,[,"(\\d{3,4})(\\d{4})","$1 $2",["[2-9]"] ,"",""] ,[,"(21)(\\d{4})(\\d{4,6})","$1 $2 $3",["21"] @@ -830,8 +846,6 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ,[,"(1[3-58]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["1[3-58]"] ,"",""] -,[,"([48]00)(\\d{3})(\\d{4})","$1 $2 $3",["[48]00"] -,"",""] ,[,"(10800)(\\d{3})(\\d{4})","$1 $2 $3",["108","1080","10800"] ,"",""] ] @@ -969,7 +983,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"DM",1,"011",,,,,,,,,,,,"767"] +,"DM",1,"011","1",,,"1",,,,,,,,"767"] ,"DO":[,[,,"[89]\\d{9}","\\d{7,10}"] ,[,,"8[024]9[2-9]\\d{6}","\\d{7,10}"] ,[,,"8[024]9[2-9]\\d{6}","\\d{7,10}"] @@ -978,7 +992,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"DO",1,"011",,,,,,,1,,,,,"8[024]9"] +,"DO",1,"011","1",,,"1",,,1,,,,,"8[024]9"] ,"DZ":[,[,,"(?:[1-4]|[5-9]\\d)\\d{7}","\\d{8,9}"] ,[,,"(?:1\\d|2[014-79]|3[0-8]|4[0135689])\\d{6}|9619\\d{5}","\\d{8,9}"] ,[,,"(?:5[56]|6[69]|7[79])\\d{7}","\\d{9}"] @@ -1125,8 +1139,8 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"[1-5]\\d{8}","\\d{9}"] ,[,,"6\\d{8}|7[5-9]\\d{7}","\\d{9}"] ,[,,"80\\d{7}","\\d{9}"] -,[,,"8(?:1[01]|2[0156]|84|9[0-37-9])\\d{6}","\\d{9}"] -,[,,"NA","NA"] +,[,,"89[1-37-9]\\d{6}","\\d{9}"] +,[,,"8(?:1[019]|2[0156]|84|90)\\d{6}","\\d{9}"] ,[,,"NA","NA"] ,[,,"9\\d{8}","\\d{9}"] ,"FR",33,"[04579]0","0",,,"0",,"00",,[[,"([1-79])(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["[1-79]"] @@ -1150,7 +1164,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ] ,"GB":[,[,,"\\d{7,10}","\\d{6,10}"] -,[,,"1(?:1[3-8]|[2-69]1)\\d{7}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|8[02-9]|9[0-9])|3(?:0\\d|[25][02-9]|3[02-579]|4[0-56-9]|[68][0-46-9]|7[1-35-79]|9[24578])|4(?:0[03-9]|2[02-57-9]|[37]\\d|4[02-69]|5[0-8]|[69][0-79]|8[02-9])|5(?:0[1-35-9]|2[024-9]|3[015689]|4[02-9]|[57][03-9]|6\\d|8[0-68]|9[0-57-9])|6(?:0[034689]|2[035689]|3[13-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|8[013-9]|9[0-24578])|7(?:0[0246-9]|2\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[13-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\d|8[2-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|8\\d|9[2-57]))\\d{5,6}|(?:2[03489]|3[0347]|55)\\d{8}","\\d{6,10}"] +,[,,"1(?:1[3-8]|[2-69]1)\\d{7}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|8[02-9]|9[0-9])|3(?:0\\d|[25][02-9]|3[02-579]|4[0-56-9]|[68][0-46-9]|7[1-35-79]|9[24578])|4(?:0[03-9]|2[02-57-9]|[37]\\d|4[02-69]|5[0-8]|[69][0-79]|8[02-9])|5(?:0[1-35-9]|2[024-9]|3[015689]|4[02-9]|[57][03-9]|6\\d|8[0-68]|9[0-57-9])|6(?:0[034689]|2[0-35689]|3[13-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|8[013-9]|9[0-24578])|7(?:0[0246-9]|2\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[13-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\d|8[2-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|8\\d|9[2-57]))\\d{5,6}|(?:2[03489]|3[0347]|55)\\d{8}","\\d{6,10}"] ,[,,"7(?:4[0-26]\\d|5(?:[013-9]\\d|2[0-35-9])|7(?:0[1-9]|8[02-9]|9[0-689]|[1-7]\\d)|8(?:[014-9]\\d|[23][0-8])|9(?:1[02-9]|2[0135-9]|3[0-689]|[04-9]\\d))\\d{6}","\\d{10}"] ,[,,"80(?:01111|\\d{7,8})|500\\d{6}","\\d{7,10}"] ,[,,"(?:9[018]\\d|87[1-3])\\d{7}","\\d{10}"] @@ -1183,7 +1197,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"GD",1,"011",,,,,,,,,,,,"473"] +,"GD",1,"011","1",,,"1",,,,,,,,"473"] ,"GE":[,[,,"[1-3579]\\d{7}|8\\d{8}","\\d{3,9}"] ,[,,"(?:122|2(?:22|36|5[03])|3(?:1[0-35-8]|[24-6]\\d|3[1-35679]|7[0-39]|9[1-35-7])|44[2-6])\\d{5}","\\d{3,8}"] ,[,,"(?:5[1578]|6[28]|7[0147-9]|9[0135-9])\\d{6}","\\d{8}"] @@ -1242,15 +1256,17 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,"GI",350,"00",,,,,,,1] -,"GL":[,[] -,[] -,[] -,[,,"NA","NA"] -,[,,"NA","NA"] +,"GL":[,[,,"[1-689]\\d{5}","\\d{6}"] +,[,,"(?:19|3[1-6]|6[14689]|8[14-79]|9\\d)\\d{4}","\\d{6}"] +,[,,"[245][2-9]\\d{4}","\\d{6}"] +,[,,"80\\d{4}","\\d{6}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"GL",299,"00",,,,,,,1] +,[,,"3[89]\\d{4}","\\d{6}"] +,"GL",299,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",,"",""] +] +] ,"GM":[,[,,"[3-9]\\d{6}","\\d{7}"] ,[,,"(4(?:[23]\\d{2}|4(?:1[024679]|[6-9]\\d))|5(?:54[0-7]|6(?:[67]\\d)|7(?:1[04]|2[035]|3[58]|48))|8\\d{3})\\d{3}","\\d{7}"] ,[,,"[3679]\\d{6}","\\d{7}"] @@ -1331,7 +1347,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"GU",1,"011",,,,,,,1,,,,,"671"] +,"GU",1,"011","1",,,"1",,,1,,,,,"671"] ,"GW":[,[,,"[3567]\\d{6}","\\d{7}"] ,[,,"3(?:2[0125]|3[1245]|4[12]|5[1-4]|70|9[1-467])\\d{4}","\\d{7}"] ,[,,"[5-7]\\d{6}","\\d{7}"] @@ -1584,15 +1600,17 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ] ] -,"IS":[,[] -,[] -,[] -,[,,"NA","NA"] -,[,,"NA","NA"] -,[,,"NA","NA"] +,"IS":[,[,,"[4-9]\\d{6}","\\d{7}"] +,[,,"(?:4(?:1[0-245]|2[0-7]|[37][0-8]|4[0245]|5[0-356]|6\\d|8[0-46-8]|9[013-79])|5(?:05|[156]\\d|2[02578]|3[013-6]|4[03-6]|7[0-2578]|8[0-25-9]|9[013-689])|87[23])\\d{4}","\\d{7}"] +,[,,"(?:6(?:1[014-8]|2[0-8]|3[0-27-9]|4[0-29]|5[029]|[67][0-69]|[89]\\d)|7(?:5[057]|7[0-7])|8(?:2[0-5]|[469]\\d|5[1-9]))\\d{4}","\\d{7}"] +,[,,"800\\d{4}","\\d{7}"] +,[,,"90\\d{5}","\\d{7}"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"IS",354,"00","0",,,"0",,,1] +,[,,"49[013-79]\\d{4}","\\d{7}"] +,"IS",354,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"",""] +] +] ,"IT":[,[,,"[01389]\\d{5,10}","\\d{6,11}"] ,[,,"0\\d{7,10}","\\d{8,11}"] ,[,,"3\\d{8,9}","\\d{9,10}"] @@ -1638,7 +1656,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"JM",1,"011",,,,,,,,,,,,"876"] +,"JM",1,"011","1",,,"1",,,,,,,,"876"] ,"JO":[,[,,"[235-9]\\d{7,8}","\\d{7,9}"] ,[,,"[2356][2-8]\\d{6}","\\d{7,8}"] ,[,,"7(?:4[5-7]|55|7[5-79]|8[5-8]|9[05-9])\\d{6}","\\d{9}"] @@ -1751,7 +1769,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"KN",1,"011",,,,,,,,,,,,"869"] +,"KN",1,"011","1",,,"1",,,,,,,,"869"] ,"KP":[,[] ,[] ,[] @@ -1813,7 +1831,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"KY",1,"011",,,,,,,,,,,,"345"] +,"KY",1,"011","1",,,"1",,,,,,,,"345"] ,"KZ":[,[,,"(?:[67]\\d{2}|80[09])\\d{7}","\\d{10}"] ,[,,"7(?:1\\d[2-7]|2(?:[0-689][2-7]|75[279]))\\d{6}","\\d{10}"] ,[,,"7(?:(?:(?:1[2-578]|2[13-7])9[01]|2758)\\d{5}|(?:0[0-257]|6[02-4]|7[57])\\d{7})|6\\{9}","\\d{10}"] @@ -1863,7 +1881,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"LC",1,"011",,,,,,,,,,,,"758"] +,"LC",1,"011","1",,,"1",,,,,,,,"758"] ,"LI":[,[,,"(?:66|80|90)\\d{7}|[237-9]\\d{6}","\\d{7,9}"] ,[,,"(?:2(?:17|3\\d|6[02-58]|96)|3(?:02|7[01357]|8[048]|9[0269])|870)\\d{4}","\\d{7}"] ,[,,"66(?:[0178][0-4]|2[025-9]|[36]\\d|4[129]|5[45]|9[019])\\d{5}|7(?:4[2-59]|56|[6-9]\\d)\\d{4}","\\d{7,9}"] @@ -2128,7 +2146,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"MP",1,"011",,,,,,,1,,,,,"670"] +,"MP",1,"011","1",,,"1",,,1,,,,,"670"] ,"MQ":[,[] ,[] ,[] @@ -2157,7 +2175,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"MS",1,"011",,,,,,,,,,,,"664"] +,"MS",1,"011","1",,,"1",,,,,,,,"664"] ,"MT":[,[] ,[] ,[] @@ -2536,7 +2554,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"3(?:0\\d|1[2-5]|2[1-3]|3[1-6]|4[2-6]|64)\\d{7}","\\d{10}"] ,[,,"800\\d{5}","\\d{8}"] ,[,,"900\\d{5}","\\d{8}"] -,[,,"(?:2(?:[125]|3[2358]|4[2-4]|9[2-8])|4(?:[0-246-9]|5[3479])|5(?:[1-35-7]|4[2-467]|8[126])|6(?:[1-8]|0[468])|7(?:[14]|2[236])|8(?:[16]|2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|22|3[27-9]|4[2-6]|6[3569]|9[2-7]))111\\d{6}","\\d{11,12}"] +,[,,"(?:2(?:[125]|3[2358]|4[2-4]|9[2-8])|4(?:[0-246-9]|5[3479])|5(?:[1-35-7]|4[2-467])|6(?:[1-8]|0[468])|7(?:[14]|2[236])|8(?:[16]|2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|22|3[27-9]|4[2-6]|6[3569]|9[2-7]))111\\d{6}","\\d{11,12}"] ,[,,"122\\d{6}","\\d{9}"] ,[,,"NA","NA"] ,"PK",92,"00","0",,,"0",,,,[[,"(\\d{2})(111)(\\d{3})(\\d{3})","$1 $2 $3 $4",["(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)1","(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)11","(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)111"] @@ -2588,7 +2606,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"PR",1,"011",,,,,,,1,,,,,"787|939"] +,"PR",1,"011","1",,,"1",,,1,,,,,"787|939"] ,"PS":[,[] ,[] ,[] @@ -2645,8 +2663,8 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"262\\d{6}","\\d{9}"] ,[,,"6(?:9[23]|47)\\d{6}","\\d{9}"] ,[,,"80\\d{7}","\\d{9}"] -,[,,"8(?:1[01]|2[0156]|84|9[0-37-9])\\d{6}","\\d{9}"] -,[,,"NA","NA"] +,[,,"89[1-37-9]\\d{6}","\\d{9}"] +,[,,"8(?:1[019]|2[0156]|84|90)\\d{6}","\\d{9}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,"RE",262,"00","0",,,"0",,,,[[,"([268]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"0$1",""] @@ -2956,7 +2974,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"64971[01]\\d{4}","\\d{10}"] -,"TC",1,"011",,,,,,,,,,,,"649"] +,"TC",1,"011","1",,,"1",,,,,,,,"649"] ,"TD":[,[,,"[2679]\\d{7}","\\d{8}"] ,[,,"22(?:[3789]0|5[0-5]|6[89])\\d{4}","\\d{8}"] ,[,,"(?:6(?:3[0-7]|6\\d)|77\\d|9(?:5[0-4]|9\\d))\\d{5}","\\d{8}"] @@ -3094,7 +3112,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"TT",1,"011",,,,,,,,,,,,"868"] +,"TT",1,"011","1",,,"1",,,,,,,,"868"] ,"TV":[,[] ,[] ,[] @@ -3219,7 +3237,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"VC",1,"011",,,,,,,,,,,,"784"] +,"VC",1,"011","1",,,"1",,,,,,,,"784"] ,"VE":[,[,,"[24589]\\d{9}","\\d{7,10}"] ,[,,"(?:2(?:12|3[457-9]|[58][1-9]|[467]\\d|9[1-6])|50[01])\\d{7}","\\d{7,10}"] ,[,,"4(?:1[24-8]|2[46])\\d{7}","\\d{10}"] @@ -3239,7 +3257,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"VG",1,"011",,,,,,,,,,,,"284"] +,"VG",1,"011","1",,,"1",,,,,,,,"284"] ,"VI":[,[,,"340(?:6[49]2|7[17]\\d)\\d{4}|(?:8(?:00|66|77|88)|900)[2-9]\\d{6}","\\d{7,10}"] ,[,,"340(?:6[49]2|7[17]\\d)\\d{4}|(?:8(?:00|66|77|88)|900)[2-9]\\d{6}","\\d{7,10}"] ,[,,"340(?:6[49]2|7[17]\\d)\\d{4}|(?:8(?:00|66|77|88)|900)[2-9]\\d{6}","\\d{7,10}"] @@ -3248,7 +3266,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"VI",1,"011",,,,,,,1,,,,,"340"] +,"VI",1,"011","1",,,"1",,,1,,,,,"340"] ,"VN":[,[,,"8\\d{5,8}|[1-79]\\d{7,9}","\\d{7,10}"] ,[,,"(?:2(?:[025-79]|1[0189]|[348][01])|3(?:[0136-9]|[25][01])|[48]\\d|5(?:[01][01]|[2-9])|6(?:[0-46-8]|5[01])|7(?:[02-79]|[18][01]))\\d{7}|69\\d{5,6}|80\\d{5}","\\d{7,10}"] ,[,,"(?:9\\d|1(?:2[1-35-9]|6[3-9]|99))\\d{7}","\\d{9,10}"] diff --git a/javascript/i18n/phonenumbers/phonenumberutil.js b/javascript/i18n/phonenumbers/phonenumberutil.js index bc62becbc..02e950283 100644 --- a/javascript/i18n/phonenumbers/phonenumberutil.js +++ b/javascript/i18n/phonenumbers/phonenumberutil.js @@ -1727,6 +1727,49 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.getCountryCodeForRegion = return metadata.getCountryCodeOrDefault(); }; +/** + * Returns the national dialling prefix for a specific region. For example, this + * would be 1 for the United States, and 0 for New Zealand. Set stripNonDigits + * to true to strip symbols like "~" (which indicates a wait for a dialling + * tone) from the prefix returned. If no national prefix is present, we return + * null. + * + * Warning: Do not use this method for do-your-own formatting - for some + * countries, the national dialling prefix is used only for certain types of + * numbers. Use the library's formatting functions to prefix the national prefix + * when required. + * + * @param {string} regionCode the ISO 3166-1 two-letter country code that + * denotes the country/region that we want to get the dialling prefix for. + * @param {boolean} stripNonDigits true to strip non-digits from the national + * dialling prefix. + * @return {?string} the dialling prefix for the country/region denoted by + * regionCode. + */ +i18n.phonenumbers.PhoneNumberUtil.prototype.getNddPrefixForRegion = function( + regionCode, stripNonDigits) { + if (!this.isValidRegionCode_(regionCode)) { + return null; + } + /** @type {i18n.phonenumbers.PhoneMetadata} */ + var metadata = this.getMetadataForRegion(regionCode); + if (metadata == null) { + return null; + } + /** @type {string} */ + var nationalPrefix = metadata.getNationalPrefixOrDefault(); + // If no national prefix was found, we return null. + if (nationalPrefix.length == 0) { + return null; + } + if (stripNonDigits) { + // Note: if any other non-numeric symbols are ever used in national + // prefixes, these would have to be removed here as well. + nationalPrefix = nationalPrefix.replace('~', ''); + } + return nationalPrefix; +}; + /** * Check if a country is one of the countries under the North American Numbering * Plan Administration (NANPA). diff --git a/javascript/i18n/phonenumbers/phonenumberutil_test.js b/javascript/i18n/phonenumbers/phonenumberutil_test.js index 4ed74ad15..37be8d7de 100644 --- a/javascript/i18n/phonenumbers/phonenumberutil_test.js +++ b/javascript/i18n/phonenumbers/phonenumberutil_test.js @@ -991,6 +991,21 @@ function testGetCountryCodeForRegion() { assertEquals(0, phoneUtil.getCountryCodeForRegion('CS')); } +function testGetNationalDiallingPrefixForRegion() { + assertEquals('1', phoneUtil.getNddPrefixForRegion('US', false)); + // Test non-main country to see it gets the national dialling prefix for the + // main country with that country calling code. + assertEquals('1', phoneUtil.getNddPrefixForRegion('BS', false)); + assertEquals('0', phoneUtil.getNddPrefixForRegion('NZ', false)); + // Test case with non digit in the national prefix. + assertEquals('0~0', phoneUtil.getNddPrefixForRegion('AO', false)); + assertEquals('00', phoneUtil.getNddPrefixForRegion('AO', true)); + // Test case with invalid region. + assertEquals(null, phoneUtil.getNddPrefixForRegion('ZZ', false)); + // CS is already deprecated so the library doesn't support it. + assertEquals(null, phoneUtil.getNddPrefixForRegion('CS', false)); +} + function testIsNANPACountry() { assertTrue(phoneUtil.isNANPACountry('US')); assertTrue(phoneUtil.isNANPACountry('BS'));