From e7db004747140adde1b146626e0588ef63ee94f7 Mon Sep 17 00:00:00 2001 From: Lara Scheidegger Date: Fri, 16 Mar 2012 15:59:09 +0000 Subject: [PATCH] JAVA: libphonenumber v4.7. Mainly metadata updates. --- .../i18n/phonenumbers/PhoneNumberUtil.java | 16 +- .../data/PhoneNumberMetadataProto_AC | Bin 252 -> 256 bytes .../data/PhoneNumberMetadataProto_AM | Bin 624 -> 629 bytes .../data/PhoneNumberMetadataProto_AT | Bin 1103 -> 1102 bytes .../data/PhoneNumberMetadataProto_AZ | Bin 1022 -> 607 bytes .../data/PhoneNumberMetadataProto_BF | Bin 418 -> 427 bytes .../data/PhoneNumberMetadataProto_BR | Bin 797 -> 888 bytes .../data/PhoneNumberMetadataProto_BY | Bin 767 -> 766 bytes .../data/PhoneNumberMetadataProto_BZ | Bin 423 -> 410 bytes .../data/PhoneNumberMetadataProto_CR | Bin 567 -> 612 bytes .../data/PhoneNumberMetadataProto_CU | Bin 475 -> 476 bytes .../data/PhoneNumberMetadataProto_DE | Bin 1694 -> 1923 bytes .../data/PhoneNumberMetadataProto_DJ | Bin 410 -> 329 bytes .../data/PhoneNumberMetadataProto_EE | Bin 846 -> 845 bytes .../data/PhoneNumberMetadataProto_EG | Bin 810 -> 862 bytes .../data/PhoneNumberMetadataProto_ET | Bin 986 -> 985 bytes .../data/PhoneNumberMetadataProto_GA | Bin 611 -> 610 bytes .../data/PhoneNumberMetadataProto_GH | Bin 463 -> 553 bytes .../data/PhoneNumberMetadataProto_HK | Bin 524 -> 540 bytes .../data/PhoneNumberMetadataProto_HN | Bin 499 -> 510 bytes .../data/PhoneNumberMetadataProto_ID | Bin 1103 -> 1478 bytes .../data/PhoneNumberMetadataProto_IN | Bin 4018 -> 4012 bytes .../data/PhoneNumberMetadataProto_JP | Bin 5124 -> 5117 bytes .../data/PhoneNumberMetadataProto_KE | Bin 561 -> 626 bytes .../data/PhoneNumberMetadataProto_KG | Bin 715 -> 714 bytes .../data/PhoneNumberMetadataProto_KH | Bin 617 -> 616 bytes .../data/PhoneNumberMetadataProto_KR | Bin 1406 -> 1447 bytes .../data/PhoneNumberMetadataProto_KW | Bin 611 -> 613 bytes .../data/PhoneNumberMetadataProto_KY | Bin 566 -> 598 bytes .../data/PhoneNumberMetadataProto_LB | Bin 550 -> 546 bytes .../data/PhoneNumberMetadataProto_LU | Bin 1506 -> 1504 bytes .../data/PhoneNumberMetadataProto_MA | Bin 769 -> 775 bytes .../data/PhoneNumberMetadataProto_MD | Bin 661 -> 660 bytes .../data/PhoneNumberMetadataProto_MK | Bin 632 -> 635 bytes .../data/PhoneNumberMetadataProto_NA | Bin 882 -> 881 bytes .../data/PhoneNumberMetadataProto_NE | Bin 484 -> 483 bytes .../data/PhoneNumberMetadataProto_NZ | Bin 857 -> 866 bytes .../data/PhoneNumberMetadataProto_SA | Bin 660 -> 659 bytes .../data/PhoneNumberMetadataProto_SB | Bin 402 -> 413 bytes .../data/PhoneNumberMetadataProto_SC | Bin 525 -> 414 bytes .../data/PhoneNumberMetadataProto_SE | Bin 2329 -> 2328 bytes .../data/PhoneNumberMetadataProto_SL | Bin 363 -> 358 bytes .../data/PhoneNumberMetadataProto_SN | Bin 443 -> 433 bytes .../data/PhoneNumberMetadataProto_UZ | Bin 1839 -> 1838 bytes .../phonenumbers/AsYouTypeFormatterTest.java | 12 +- .../phonenumbers/PhoneNumberMatcherTest.java | 21 +- .../phonenumbers/PhoneNumberUtilTest.java | 59 +- .../phonenumbers/ShortNumberUtilTest.java | 8 +- .../phonenumbers/TestMetadataTestCase.java | 50 ++ java/release_notes.txt | 9 + resources/PhoneNumberMetaData.xml | 761 +++++++++++------- 51 files changed, 575 insertions(+), 361 deletions(-) create mode 100644 java/libphonenumber/test/com/google/i18n/phonenumbers/TestMetadataTestCase.java diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java b/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java index 883a676ee..9ae038069 100644 --- a/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java +++ b/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java @@ -63,6 +63,9 @@ public class PhoneNumberUtil { static final int MAX_LENGTH_FOR_NSN = 16; // The maximum length of the country calling code. static final int MAX_LENGTH_COUNTRY_CODE = 3; + // We don't allow input strings for parsing to be longer than 250 chars. This prevents malicious + // input from overflowing the regular-expression engine. + private static final int MAX_INPUT_STRING_LENGTH = 250; static final String META_DATA_FILE_PREFIX = "/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto"; private String currentFilePrefix = META_DATA_FILE_PREFIX; @@ -261,7 +264,7 @@ public class PhoneNumberUtil { // plus_sign*(([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])* // Note VALID_PUNCTUATION starts with a -, so must be the first in the range. private static final String VALID_PHONE_NUMBER = - "[" + PLUS_CHARS + "]*(?:[" + VALID_PUNCTUATION + STAR_SIGN + "]*" + DIGITS + "){3,}[" + + "[" + PLUS_CHARS + "]*+(?:[" + VALID_PUNCTUATION + STAR_SIGN + "]*" + DIGITS + "){3,}[" + VALID_PUNCTUATION + STAR_SIGN + VALID_ALPHA + DIGITS + "]*"; // Default extension prefix to use when formatting. This will be put in front of any extension @@ -1623,9 +1626,13 @@ public class PhoneNumberUtil { } else { // Invalid region entered as country-calling-from (so no metadata was found for it) or the // region chosen has multiple international dialling prefixes. + LOGGER.log(Level.WARNING, + "Trying to format number from invalid region " + + regionCallingFrom + + ". International formatting applied."); prefixNumberWithCountryCallingCode(countryCode, - PhoneNumberFormat.INTERNATIONAL, - formattedNumber); + PhoneNumberFormat.INTERNATIONAL, + formattedNumber); } return formattedNumber.toString(); } @@ -2737,6 +2744,9 @@ public class PhoneNumberUtil { if (numberToParse == null) { throw new NumberParseException(NumberParseException.ErrorType.NOT_A_NUMBER, "The phone number supplied was null."); + } else if (numberToParse.length() > MAX_INPUT_STRING_LENGTH) { + throw new NumberParseException(NumberParseException.ErrorType.TOO_LONG, + "The string supplied was too long to parse."); } // Extract a possible number from the string passed in (this strips leading characters that // could not be the start of a phone number.) diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC index fbb7a91402f26e2fa2e96208922749bb0369786c..52de7be796a8e5c728c7dd3c7fb3f826a0da0c3e 100644 GIT binary patch delta 73 zcmeyv*udnt<}Cwj`7Z_r21Z6k2A*gmT@y3&*qD@R<61@rRv>Ls3zT6{(6F~MjyBLW Zjjb_>HqkYUt%)`=11hUAH<)O<9{{t<8 diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM index c6a51446780f3820dda7e61e33b6f4e6199bd8e7..54618677dc86d1381971e3b86732941117e449ee 100644 GIT binary patch delta 70 zcmeys@|8tv&07Z6Dh39o90mpkMn*;ku4qGD%h;HdYV%q~26iBAs$)?Llwt6isB6z! WV`3hYvN0!;k(I>|$ew(haU}p@77^0` delta 64 zcmey$@_|Kn&07Z6Dh39obOr_nMn*;k-e^NzV^dwr*qD@R^IAp*b|7u4V^Ir~WN@9R RWxp{ml97qgaPk?(l>qno56=Jq diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT index 35684449c1f77f40eb337f683523bc19d82b1854..751674c43b0bac8f39d83068588b2276a5f46550 100644 GIT binary patch delta 23 fcmX@lagJkxE~EZLJ(-Q(`y delta 25 hcmX@dah_v>E~CLjJsC!mjb8hhnaf?GCv&qn0|01G2W9{O diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ index 75b798b79455a32809a4063d87f8d8c5c6219ada..34d4f940c31ffc84a2440efa9bbd805a9c0ad240 100644 GIT binary patch delta 166 zcmeyzexId&&07Z6Dh39oFa`z&Mn*;ku4qGD%h;HdYKvM%26iBAu47pXlwq*Yu(vXd zHnIT9)ffTU21YeNu1Rc-QM8dRkTN!|i8e8fHL5X-HZqRYtT8q-)dXrcLo$Yufz!~) w7>Gxq>Gnnkh_>qx$vIA4*WM3xb$*Y-z0cvL{od5s; literal 1022 zcmbtTOHRWu5S_Fts1&hBAhnAu8mW=&@h1+Osu$n@nCv(Ob#KI}*t2B8jyFl9q*RrV zTBROm#_!F{^W@`;X75DPZz9UFjBcYY>*n=sUv0u6qigKkramA>KkMz2#vf1QfHSEs zuqaMCs?vqJNhTT>nq;HWrmWy_h*;V9sMuH!?o`3YwhT>?7+i`$BD@U0fI0atA`ZbC zSmW9VsxwYVievzhh$Mtz3qIS?Xtqv(QClx*+_Bpg$%_YhL7>q~iq7L)RfE>MEdth} zb3UNKy&LI}(Ok2^W1WX251@(GH%c1SC=tC?jeshEX0SEv+#-n}DnPD7_!|yk2rp`- zSScJaV}{O)V_=v(@7hJ~Xocht@N0iCc77m$R|ydqKvYB!NkxN zJ+4tJgc4&q)4##cBG;>&SGif`Rwj&=$f;#~+Pja|H7vJhM1DvwRjgI6VeuPt52Ss< zQ|<}#CGZ=AAuZb(J)*fET5G!;Dmg7-iBF*)eVJ|PFXCNhvBG-3y?;nIi}KOndZ5oB P&k69XJXt-$io8U>TP@R# diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF index 802997eed50131f7792b24dcf00442e926a2c02e..ad53ba8d29d3716ec30852f60d572ad6692d96d7 100644 GIT binary patch delta 45 zcmZ3)yqcMF&07Z6Dh39|MH4y8g`G6)t;~SfAlg9JIJU+jCPi~%w;ZG8#Fak*Bo_^` delta 62 zcmZ3@yoi}|&07Z6Dh39|nG-q7H7zylt;`If4RnoTYs`V{Xagf%GmF@mlo~^zpoy7< NB~Tp5GMl*RCjc5c5)=Rc diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR index 31ed9bc751ca25c82e0af7b9e77220e9c731a464..96d2ae4e6681709be91306d31f8ba29a3d28b1c6 100644 GIT binary patch delta 231 zcmXAjJ#NB45QS$9;jd3Y6&DM5C9mXJukBqL7rp=mqA~8Ej?xnEA&~3bAoRHo2cS=x z*-*^9_cZ!O?`!fqG2ah(xd4pb0RRzU*^)A)a^3OtS*4WuzF=ol=MiTAj_A7SG;v-K z>D&}$WgU|rl+@cWMVp(d>)TRU{?a?9DAoRY+t260XDQJz#TC+^FyVc`JFW*Cz3uqo yrK}Mmp}7!@;Wc4Idl{s7it!R=f?}bS$U|)y5jli$B1m$pEEY`@hXBJl`uPK{ZZi}B delta 140 zcmeytHkVC(&07Z6Dh38-5e5bZMn*;ko@hf|%h;HdYI7aST1EyAAj?9>&|soTtfm2w z&t+(6WNcz;W^Q2#RGeX`VQ&S((Pm&xHKx(VCg!md4~MX^0W}&LOjcl2Wi*)V#;5@# g^BEs9Do+k%lIN?{)U;=0U{WyxTFSsY`2f=n0L5}33;+NC diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY index 284b3b32faf8e86d04bcf93611ae370be3c4f1fc..a78037b199fe5f159d61cd64fdd6585f2c7db56e 100644 GIT binary patch delta 28 kcmey*`j1t3&07Z6Dh39ouM7+fjEsy7;?ag1MP4%j0DT1qf&c&j delta 29 lcmeyz`kz%~&07Z6Dh39oZww3!jEsy7648c68--sp0RV&h2etqJ diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ index b1f0a8839e4584cb18dc42ff5b552016b42e5651..0b04b15a6cf171ef7e51ecf105da8771a8d099c8 100644 GIT binary patch delta 35 rcmZ3^Jd2rg&07Z6Dh39|i4!@)d3nvE4Rnpo%wuCxs!cam=`sQUuh0p) delta 48 zcmbQmyquYH&07Z6Dh39|c@sIqrKHR>?5&~=bd6(UQfi{j%wwYs3}ZE8QmRch=ISy6 E07;t-ssI20 diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR index 307c8abfc47c508ea0a5faa3fa24f66a1ae0c36c..de374d1010ff80a0421277f78b75e85eb1fc8f4a 100644 GIT binary patch delta 100 zcmdna@`QzR&07Z6Dh39o=!u-~CDM!x4WbQn&0=Fxs!eKZObj&at)dM~VkiE$5U()@ vN*RJ=jB7P(ObrbTz=|eYFy@L$X&71pm4fsdnV4C`))-pWn3+x9%Gd+|33MI% delta 56 zcmaFDvYmx<&07Z6Dh387y@{Of+3igXH0-SmCJQiHFltVYXUr84(J-_G2}K*|8pYNa KT26k%*aQHsaSsas diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU index ec56f92eb37820aa80435b9569d4180c5ffddb9b..4ff335130ae858370765f5de597e5f1f7fd6a054 100644 GIT binary patch delta 28 kcmcc3e21BH&07Z6Dh39|%NsfQ8Cls44WdmZ%P{T-0DeCQ=l}o! delta 27 jcmcb^e4Ckb&07Z6Dh39|OB*@)8Clp24WcK@GVTWecH9TD diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE index 673ba16f5d2f1e9b5386e8a1613b698472799c26..9163e1b0fdf71ed36716ce443305d0ed83dc9b67 100644 GIT binary patch delta 265 zcmbQo+swbAfXPJ4&_cuB$}lFS+EmBTu(l@JNY^qJ$g`-`WMtp~F?0+~Y8e^04J}L! z3=EBoO-#)uS2B4sa&JD$B+1BH#lXN^I{6;6_GUho2&Q@=4UkbrwVE0*6EzuFRSXqW zj2IXg7#WxiEewIAfeMfW0s##}3!pk_x YY&zH_K;IxcgA=IONY~VSawMB802*;LO#lD@ delta 47 zcmZqXpU1nQfQggI&ykSR)$jHDMZDbxBlTvM7%gDeAq%CTJ!VKa@8unI((MGza yu{Gw=CO}dXC}#>+!^ps4WN2(=U|?VjRLx^<9&M&;0Wt=rWMa<}M#jmpjJ5zM-W!Gh literal 410 zcmcJLF%H5o3`Lzt6_sFNU}NZzp_N+XBu!JXR7gw=Tp)Dg6wn@mdvG<5fP|BR)Es~) zvK{-`-^%j^$qj%#fDB`>a?{ z8mz0y`n;JnGf0)x4I*k9vnJfyqI1nxC?>6KwM3Le^7A1WFaD1>k9e_)Jd1OSO=2(m{z2XuA@|S*+siZBt+ObXBv;2uGo!I4lB5*gHEDF-3k7ZkW2UrZ zqEH6ZoW>?JSi)M?F=H+XO?go&XwU^Prj-FiCE<{T2BD}f>@E{1dj<$Nhbqm8g&4r% z4*^%R_BF?w_M74KvA}zblkVhpk1ArBx+bP)Oi++mUjk9Vsm28p)PbJrs-MX+%y7b!5tIGakZO@s&S@ diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET index b3bde00460ccbedcc0258a9909924f8f7d949771..15e0c7d7cb670c73758c1b5a068d4fdc1ff90057 100644 GIT binary patch delta 26 icmcb`ev_SZ&07Z6Dh3AT3lljN8T%$`Pu#dymKgwgatPZ1 delta 28 kcmcb~ev6%R&07Z6Dh3ATixW8&8T%({Ph>ROxJQ;50E!?94*&oF diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA index 438299c66e902c4ef43c07d50eaef09ef2e3a24a..fb204d0893b2e88d15975c84e9b66e659905711c 100644 GIT binary patch delta 27 jcmaFN@`#0V&07Z6Dh39o$cdb-jI$>8mu+TajAaA>f?Ei( delta 29 lcmaFF@|cBl&07Z6Dh39osEM4djI$^9moXY|W@U_J1OSrV2zm v`8hH&00{;LCU*~@`j-q$1_lg_42)0$D8#@x`3R$m5KxfWK*f*|Bmw~d@6-|b diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK index 9e5fa06a3a4a6ba24ca4ae62a964657422dfb9cb..0b3561a80d9d8c989950de2c64162a146cd6bcec 100644 GIT binary patch delta 59 zcmeBSnZv@l<}Cwj6$1m4@I=lq7OrShvxzCQq}a@3QmV~s85vlCv;~mnFgG+ZHZe6b MpZH#SvJ&Gf0LWnv-2eap delta 41 vcmbQk(!;{J<}Cwj6$1kk^F+=tR_`V=Hb%~31OO<_4F>=K delta 31 ncmeyz{F#|^&07Z6Dh39|R}(oE7_Us!(q^%YHZa_nGK&!atm+CP diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID index 5c45880c4004429b666111520ea6b130cbae81bc..fc2cd499f7afc8219c8268c7c4e21501a82ce2c3 100644 GIT binary patch delta 426 zcmX|-J5B>Z5JWx5NJzd2gLb6(e;^>?00d;sWKPJ5aIbs?ODhh7Ouz|9xdSJmdcXuL z^>%f=s@<=P&&|PHz5C1CYlnxdsr_-g%Tt-T$uMgsA7xjjI_tNa2elm3{a!uc{A3H{ zV(J{py3UE5iMe&omMhtiFao7nu50B+&Zpcp!)0P`9I+3Xo70>yItmdM@*--^=u~i3 zAi)r_IA|Xl2o;NjcOXryavcO9uc5O?5JbcT@eH)|3b;c_iO&B^PgRJ;LX6^Y?YGSU zB54Fd@lAYvu+i=>&m#^ad5J1TgEY`18bzdKJRv2D{rI*a6mmt{Yy9Oj<(Zdnbv%Dr Pt<=Zy_3T+KoAuofvz~UE delta 54 zcmX@ceV${2F5gU}XhS2D*qD@Ra~+G?jo~4Tj3$#;GX^j*2uu!R-aPp)GtXuzmJCLw Ka+k?XtS$iC2@t0M diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN index f07407afcd720f19c8a976cad13e67df9cb56a5c..6f1ad2831e276cda70f044b71d5cc6d14ea64cee 100644 GIT binary patch delta 141 zcmdlazeaw7xsHy8y_KP1jZw6LQEZK|ag9l|fk|wQxus^bk*;}cOiHzRZH!qKMYu|QEX3(MFVvuGm|T~mw6iip8k%_LU1<-(KBV&-z$p5?+ifK;7>dxlD8| oV?pLJKbWi}a2zP(IoVjyfUnH3#t3Mjk#UV_w5jgqBEd;a0H5tEivR!s delta 174 zcmeyX-lDPL8XM#C$%@=klRvU)Gn!16VgJZh#lXPAP%~MW!;{f;@&_(?j%Z_D^H@!$ zc|diaCX4aE6^J&{wTRWMG1joRG6%9vCl_+ngVh=^{sk&}#|k!Lav|r($*jCrz%t5{ z|M03avOGPY*2tiW-&61B;?f(HEMhBZb&vyF^vOruS8EjDKhPGSN8 DY=br1 diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE index 197ff1edcdc43c6e09c4b14df0120a8182f3695d..a7c91d43fd8a0497f85ed2e8144f813e7a01f23d 100644 GIT binary patch delta 239 zcmdnU@`&07Z6Dh39oOa=x9Mn*;kF(ZSRlxi~_^V*td6J5(#Fvqf%k%0rqGSx9O zs0Aux$U&$w(Xh9QHZU{>sRU^Y5JOY+Lrh$>Jskue$#_v{)0IZNhGXMYp delta 175 zcmeywvXLcW&07Z6Dh3874F(1VMn*;kF(ZSRlxh_WEz1qXhO9!GO&YK6IV&gn8wyb8yXn{&8jg4 zDl>_#F$YpWQHyA^i4PSx1T72qmp7+I@; U5;G?+WEPqHg;{hnA4>rv0ME}3pa1{> delta 46 zcmZ3^{f}z{ClenRgQ!MKO0`j~CWx9`$RfTuoM{u|WIh&6)+z=D#)8e}ECq}JF;5IU diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW index adb7f31efd2e65d8a5a136c8e89f8716eaed5195..cf386eeab999b496b22fb449f8e171de7112e9ae 100644 GIT binary patch delta 38 scmaFN@|1;h&07Z6Dh39on2DUT1gbUctxSQ~Alg9J$kfbYj2RP+)j3U~jZJmUEn{mYMoF_on^?q7tg*KDFg7vO zu(vWciZ;{*N`csh(PrkcHAc}u#j!Oe(Pp|9u{Gvqnl+Y4a>gLV#?fXIzg|<~1{z^u jVi}WCZBom~zy_oZ4S)no2>2JjZI8}vc^Wy#=7P}K@bP1&deOBFxpfXNSOdB%UI1COR$U?NRd&r Z3CL*U=!t)>aWeTiGBN-OhRI(TlK_)1Clmkx diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB index 255bc5f71d7baa6fa5041454bf97f7bc17e24166..6b2dba9cbecf736f1ab2ee5c24f8c0ae3125ebc1 100644 GIT binary patch delta 89 zcmZ3+vWSIq&07Z6Dh387$%&jf5{er3R>mJvQpy_kR>mnucZ?_ErYb2D)akHPMD9y5_MlDK$pXM#g65ma#R) T(FVpQrWUa^76u#Nh%x~HNQM$^ delta 57 zcmZo?Yh>eG^Ok|Nih+UY$3)Hp%Gzcc_ErYb2D-*(u{F_#Cc5UaF)1}h(MBM?akR0C KMeN2;qD%nZa1h%7 diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD index 565dc363c77abf30abef5913b8e67735f5da098a..3002dfb745132049f1067b2c5723976879fa703d 100644 GIT binary patch delta 29 kcmbQrI)zna&07Z6Dh39oZUzPhMn*;k?r0;^jiL=q0A%_G1poj5 delta 30 lcmbQjI+ay)&07Z6Dh39o9tH*mMn*;ko@gUevyCDROaN;120Z`( diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK index 010e1269a5d330737f38cfda8868ed09709a8c17..5dcd3849af08f1ecd067e742084e2dfb8229fe31 100644 GIT binary patch delta 49 zcmeyt@|%To&07Z6Dh39oqKTXe(xn>qRz^S^ZDbr9lTu?EZD?c~TVob&U>Lj6(VPhY Da9|E2 delta 46 zcmey(@`HtQ&07Z6Dh39o{E3_j5=9#JRz^S^ZDbr9lTu?EZD?c~TVrOp(Z!qz07aS& AH2?qr diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA index 2ee1fa962b1be90e46a11c833ec3d5bd2148017b..3bcfaa801c6e3dede46d22a25e866e5f71f00b34 100644 GIT binary patch delta 26 icmeyw_K}Tq&07Z6Dh3ATjES6zjENJqr8c_hFarQ|s0Wn* delta 28 kcmey!_KA&i&07Z6Dh3AT%!!n_a`9V68yFg!n3-E_TGftLa zHWv}q0LmHFYJwi;2HGt|&CeLM(l3+42WMp7APyv!aAf#br1eP?O{FX^Vipj_bNm5oL z+Q`%bY?RStS!QLyXage?bD-HZrZv$(aRYMo&07Z6Dh39ou8Eu$QpOtgR?&t=vC&2*x)!lD#?i*6Alf9_cw>wO697Ah B4E6v3 delta 49 zcmbQtI)#;U&07Z6Dh39o?unch(k2@AR?&t=vC&2*x)!lD#?i*6Alf9_*koh01rq>B Cm<=od diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB index a5ea1793c06b1f804aeca25c7642354da347d327..605df51a6811cd4b89586e0c7e4244423b9d59e1 100644 GIT binary patch delta 62 zcmbQlJeQes&07Z6Dh39|DHAyp%#D>P(#Z696(~63YMp delta 68 zcmbQsJc*fe&07Z6Dh39|&WW6f`WogM_Esh_DK)0i21cg37O^#E(FTUGnlUNWCbcyd U(I!A4AltN-k%1LRPh9d70Fr2qf` diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC index 7f55e5ae9db9440ee7ff88a0190fbcb5b30f43fa..a9ca75a944e1041a3d059d2659569e0d07c6e878 100644 GIT binary patch delta 67 zcmeBWna9kz<}Cwj6$1m~)QOxbx;!S)M!F_uu`wytrnQU=tU%fvNVA(58JZg!88b36 Ra2rLN>RNymY&_}02mm(#5TpPA delta 179 zcmbQo+{?nb<}Cwj6$1kk%S29_{G>+A*F@Z`LM4MVz z#?}}{8yM>X>1ZP$8Iz(}6K!l_24qwl)oN-2DdSp3238<#4y4&lj10{Ujf@!?8EnC3 t1C0WjZej-3T4NdwVrbTw1BGRQ;^rU&Yb>ITOu)hx5JN#`Zj5qa1ONzMF0B9n diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE index a023e7b249aaedddf0ad5d9fad029155a254404d..e52ec10fb414d3b882549294b1d8daf02f5cb4cb 100644 GIT binary patch delta 49 zcmbO!G(%{D4x{}-UB=CNjJKKCRH_&lSQs|*v;1e~sRgnbSv46rR16g+C$h#(uHaY* E05q5k3IG5A delta 51 zcmbOsG*f7T4x__DT}DR3&AN=Ynb@ir7+4roHuJIkXXXL28QE$z88}o76(%RJ#!W8g GSO@?>L<~9r diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL index d059d665236d7fa2792a9b6e0e16ee33d509787c..8f7318207187d8efa126a0a531c8eaa636449ed9 100644 GIT binary patch delta 36 scmaFO^o)sf&07Z6Dh39|*omA0jH(l(q_`|&Yb-1@V^XTkCN{qS0L>2zi~s-t delta 41 xcmaFH^qPrt&07Z6Dh39|q=}pXj9L?;r1&jjYb-1@qYZT}V`EaPO()j9000B`4C4R* diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN index 3f9e56717131f7043f3c08d882fb856a7ba4942b..0350bb98739dbae5d25a48a39f76389cfa206a5c 100644 GIT binary patch delta 31 ncmdnZypfr6&07Z6Dh39|6%#o_8Dl5L2eRr~#>S*f-2Vpvnz{;~ delta 41 xcmdnUyqlSG&07Z6Dh39|O%pjo8Pg}m2l5-~np?)kq|{hM8yFf}#!lS&2LJ{K4OIXD diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ b/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ index 18262d29cd4ea6001b1cd3ce97077b83a7ecac79..aedacceecd6b8f3f577d8a1b8fb0197c4708fae5 100644 GIT binary patch delta 29 lcmZ3_w~lXuCS&|YEgr_r=8Tt^*o>3{^Rp;00|0$K2KfL0 delta 31 ncmZ3-x1Mi;CS$@zEgnWjlg(y~mzdb97#NrpjW_eLC@=#6hn5E} diff --git a/java/libphonenumber/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java b/java/libphonenumber/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java index 24eb8d708..1e2ef4525 100644 --- a/java/libphonenumber/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java +++ b/java/libphonenumber/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java @@ -21,18 +21,12 @@ import junit.framework.TestCase; /** * Unit tests for AsYouTypeFormatter.java * - * Note that these tests use the metadata contained in the files with TEST_META_DATA_FILE_PREFIX, - * not the normal metadata files, so should not be used for regression test purposes - these tests - * are illustrative only and test functionality. + * Note that these tests use the test metadata, not the normal metadata file, so should not be used + * for regression test purposes - these tests are illustrative only and test functionality. * * @author Shaopeng Jia */ -public class AsYouTypeFormatterTest extends TestCase { - private PhoneNumberUtil phoneUtil; - - public AsYouTypeFormatterTest() { - phoneUtil = PhoneNumberUtilTest.initializePhoneUtilForTesting(); - } +public class AsYouTypeFormatterTest extends TestMetadataTestCase { public void testInvalidRegion() { AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(RegionCode.ZZ); diff --git a/java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberMatcherTest.java b/java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberMatcherTest.java index 9127f7799..30a8faba9 100644 --- a/java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberMatcherTest.java +++ b/java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberMatcherTest.java @@ -33,13 +33,7 @@ import java.util.NoSuchElementException; * @author Tom Hofmann * @see PhoneNumberUtilTest {@link PhoneNumberUtilTest} for the origin of the test data */ -public class PhoneNumberMatcherTest extends TestCase { - private PhoneNumberUtil phoneUtil; - - @Override - protected void setUp() throws Exception { - phoneUtil = PhoneNumberUtilTest.initializePhoneUtilForTesting(); - } +public class PhoneNumberMatcherTest extends TestMetadataTestCase { /** See {@link PhoneNumberUtilTest#testParseNationalNumber()}. */ public void testFindNationalNumber() throws Exception { @@ -710,6 +704,19 @@ public class PhoneNumberMatcherTest extends TestCase { assertEquals(expected, actual); } + public void testNonPlusPrefixedNumbersNotFoundForInvalidRegion() throws Exception { + // Does not start with a "+", we won't match it. + Iterable iterable = phoneUtil.findNumbers("1 456 764 156", RegionCode.ZZ); + Iterator iterator = iterable.iterator(); + + assertFalse(iterator.hasNext()); + try { + iterator.next(); + fail("Violation of the Iterator contract."); + } catch (NoSuchElementException e) { /* Success */ } + assertFalse(iterator.hasNext()); + } + public void testEmptyIteration() throws Exception { Iterable iterable = phoneUtil.findNumbers("", RegionCode.ZZ); Iterator iterator = iterable.iterator(); diff --git a/java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java b/java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java index d78e80f1e..fd151689a 100644 --- a/java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java +++ b/java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java @@ -31,19 +31,13 @@ import java.util.List; /** * Unit tests for PhoneNumberUtil.java * - * Note that these tests use the metadata contained in the files with TEST_META_DATA_FILE_PREFIX, - * not the normal metadata files, so should not be used for regression test purposes - these tests - * are illustrative only and test functionality. + * Note that these tests use the test metadata, not the normal metadata file, so should not be used + * for regression test purposes - these tests are illustrative only and test functionality. * * @author Shaopeng Jia * @author Lara Rennie */ -public class PhoneNumberUtilTest extends TestCase { - private PhoneNumberUtil phoneUtil; - // This is used by BuildMetadataProtoFromXml. - static final String TEST_META_DATA_FILE_PREFIX = - "/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting"; - +public class PhoneNumberUtilTest extends TestMetadataTestCase { // Set up some test numbers to re-use. private static final PhoneNumber ALPHA_NUMERIC_NUMBER = new PhoneNumber().setCountryCode(1).setNationalNumber(80074935247L); @@ -110,17 +104,6 @@ public class PhoneNumberUtilTest extends TestCase { private static final PhoneNumber INTERNATIONAL_TOLL_FREE_TOO_LONG = new PhoneNumber().setCountryCode(800).setNationalNumber(1234567890L); - public PhoneNumberUtilTest() { - phoneUtil = initializePhoneUtilForTesting(); - } - - static PhoneNumberUtil initializePhoneUtilForTesting() { - PhoneNumberUtil.resetInstance(); - return PhoneNumberUtil.getInstance( - TEST_META_DATA_FILE_PREFIX, - CountryCodeToRegionCodeMapForTesting.getCountryCodeToRegionCodeMap()); - } - public void testGetSupportedRegions() { assertTrue(phoneUtil.getSupportedRegions().size() > 0); } @@ -1036,11 +1019,9 @@ public class PhoneNumberUtilTest extends TestCase { // Invalid country calling codes. invalidNumber.setCountryCode(3923).setNationalNumber(2366L); assertFalse(phoneUtil.isValidNumberForRegion(invalidNumber, RegionCode.ZZ)); - invalidNumber.setCountryCode(3923).setNationalNumber(2366L); - assertFalse(phoneUtil.isValidNumberForRegion(invalidNumber, RegionCode.UN001)); - invalidNumber.setCountryCode(0).setNationalNumber(2366L); assertFalse(phoneUtil.isValidNumberForRegion(invalidNumber, RegionCode.UN001)); invalidNumber.setCountryCode(0); + assertFalse(phoneUtil.isValidNumberForRegion(invalidNumber, RegionCode.UN001)); assertFalse(phoneUtil.isValidNumberForRegion(invalidNumber, RegionCode.ZZ)); } @@ -1594,6 +1575,38 @@ public class PhoneNumberUtilTest extends TestCase { assertEquals(premiumNumber, phoneUtil.parse("0900 a332 600A5", RegionCode.NZ)); } + public void testParseMaliciousInput() throws Exception { + // Lots of leading + signs before the possible number. + StringBuilder maliciousNumber = new StringBuilder(6000); + for (int i = 0; i < 6000; i++) { + maliciousNumber.append('+'); + } + maliciousNumber.append("12222-33-244 extensioB 343+"); + try { + phoneUtil.parse(maliciousNumber.toString(), RegionCode.US); + fail("This should not parse without throwing an exception " + maliciousNumber); + } catch (NumberParseException e) { + // Expected this exception. + assertEquals("Wrong error type stored in exception.", + NumberParseException.ErrorType.TOO_LONG, + e.getErrorType()); + } + StringBuilder maliciousNumberWithAlmostExt = new StringBuilder(6000); + for (int i = 0; i < 350; i++) { + maliciousNumberWithAlmostExt.append("200"); + } + maliciousNumberWithAlmostExt.append(" extensiOB 345"); + try { + phoneUtil.parse(maliciousNumberWithAlmostExt.toString(), RegionCode.US); + fail("This should not parse without throwing an exception " + maliciousNumberWithAlmostExt); + } catch (NumberParseException e) { + // Expected this exception. + assertEquals("Wrong error type stored in exception.", + NumberParseException.ErrorType.TOO_LONG, + e.getErrorType()); + } + } + public void testParseWithInternationalPrefixes() throws Exception { assertEquals(US_NUMBER, phoneUtil.parse("+1 (650) 253-0000", RegionCode.NZ)); assertEquals(INTERNATIONAL_TOLL_FREE, phoneUtil.parse("011 800 1234 5678", RegionCode.US)); diff --git a/java/libphonenumber/test/com/google/i18n/phonenumbers/ShortNumberUtilTest.java b/java/libphonenumber/test/com/google/i18n/phonenumbers/ShortNumberUtilTest.java index 20644d211..c6d2c7481 100644 --- a/java/libphonenumber/test/com/google/i18n/phonenumbers/ShortNumberUtilTest.java +++ b/java/libphonenumber/test/com/google/i18n/phonenumbers/ShortNumberUtilTest.java @@ -25,16 +25,10 @@ import java.io.InputStream; * * @author Shaopeng Jia */ -public class ShortNumberUtilTest extends TestCase { +public class ShortNumberUtilTest extends TestMetadataTestCase { private ShortNumberUtil shortUtil; - static final String TEST_META_DATA_FILE_PREFIX = - "/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting"; public ShortNumberUtilTest() { - PhoneNumberUtil.resetInstance(); - PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance( - TEST_META_DATA_FILE_PREFIX, - CountryCodeToRegionCodeMapForTesting.getCountryCodeToRegionCodeMap()); shortUtil = new ShortNumberUtil(phoneUtil); } diff --git a/java/libphonenumber/test/com/google/i18n/phonenumbers/TestMetadataTestCase.java b/java/libphonenumber/test/com/google/i18n/phonenumbers/TestMetadataTestCase.java new file mode 100644 index 000000000..457712570 --- /dev/null +++ b/java/libphonenumber/test/com/google/i18n/phonenumbers/TestMetadataTestCase.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2012 The Libphonenumber Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.i18n.phonenumbers; + +import junit.framework.TestCase; + +import java.io.IOException; +import java.io.InputStream; + +/** + * Root class for PhoneNumberUtil tests that depend on the test metadata file. + *

+ * Note since tests that extend this class do not use the normal metadata file, they should not be + * used for regression test purposes. + * + * @author Shaopeng Jia + * @author Lara Rennie + */ +public class TestMetadataTestCase extends TestCase { + private static final String TEST_META_DATA_FILE_PREFIX = + "/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting"; + + protected final PhoneNumberUtil phoneUtil; + + public TestMetadataTestCase() { + phoneUtil = initializePhoneUtilForTesting(); + } + + static PhoneNumberUtil initializePhoneUtilForTesting() { + PhoneNumberUtil.resetInstance(); + PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance( + TEST_META_DATA_FILE_PREFIX, + CountryCodeToRegionCodeMapForTesting.getCountryCodeToRegionCodeMap()); + return phoneUtil; + } +} diff --git a/java/release_notes.txt b/java/release_notes.txt index 5970332a7..ecfdd28e2 100644 --- a/java/release_notes.txt +++ b/java/release_notes.txt @@ -1,3 +1,12 @@ +March 16th, 2012: libphonenumber-4.7 +* Bug fixes + - Now return "too long" for input that is longer than 250 chars when parsing +* Metadata changes + - AC,AM,AT,AZ,BF,BR,BY,BZ,CR,CU,DE,DJ,EE,EG,ET,GA,GH,HK,HN,ID,IN,JP,KE,KG,KH,KR,KW,KY,LB,LU,MA,MD, + MK,NA,NE,NZ,SA,SB,SC,SE,SL,SN,UZ + * Refactoring of test classes so that tests requiring the test metadata to be loaded have a common + base class which handles this. + February 9th, 2012: libphonenumber-4.6 * Bug fixes - Fix for formatByPattern to enable RFC formatting to work diff --git a/resources/PhoneNumberMetaData.xml b/resources/PhoneNumberMetaData.xml index bdbf55cb1..6fe4704cb 100644 --- a/resources/PhoneNumberMetaData.xml +++ b/resources/PhoneNumberMetaData.xml @@ -30,7 +30,7 @@ applied. Country code, international and national prefix information main source: - http://www.itu.int/publ/T-SP-E.164C-2010/en + http://www.itu.int/pub/T-SP-E.164C-2011 Emergency numbers Wikipedia source: http://en.wikipedia.org/wiki/Emergency_telephone_number @@ -94,15 +94,18 @@ - [2-46]\d{3} + [2-467]\d{3} \d{4} + (?: 3[0-5]| 4[4-6]| - [26]\d + [26]\d| + 70 )\d{2} \d{4} @@ -573,7 +576,10 @@ nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)"> - 1 + + 1| + 47 + $1 $2 @@ -596,10 +602,12 @@ - [1-35-9]\d{7} + [1-9]\d{7} \d{5,8} + (?: 10\d| @@ -611,14 +619,16 @@ 6[1-9]| 8[1-7] )| - 3[12]2 + 3[12]2| + 47\d )\d{5} 10123456 + seems to be used by Orange Armenia. Part of the range 97 is used by Nagorno-Karabakh + Republic. --> (?: 55| @@ -1322,7 +1332,7 @@ (?: 2(?: 1[467]| - 2[134-8]| + 2[13-8]| 5[2357]| 6[1-46-8]| 7[1-8]| @@ -1817,26 +1827,7 @@ $1 $2 $3 $4 - - 22 - $1 $2 $3 $4 - - - 36[0-46-9] - $1 $2 $3 $4 - - - - 1[013-79]| - 2(?: - [45][13-9]| - [7-9] - ) - - $1 $2 $3 $4 - - + [4-8] $1 $2 $3 $4 @@ -1847,73 +1838,32 @@ - [1-9]\d{7,8} - \d{5,9} + [1-9]\d{8} + \d{7,9} - (?: - 1(?: - (?: - [28]\d| - 9 - )\d| - 02| - 1[0-589]| - 3[358]| - 4[013-79]| - 5[0-479]| - 6[02346-9]| - 7[0-24-8] - )| + 1[28]\d| 2(?: - 02\d| - 1(?: - 2[0-8]| - 42| - 6 - )| - 2(?: - 2[0-79]| - 3[0-35]| - 42| - [1-35-9]| - )| - 3(?: - 3[0-58]| - [0-24] - )| - 4(?: - 2[0124579]| - [1468] - )| - 5(?: - 2[0124579]| - 5 - )| - 6(?: - 2\d| - 3[0128]| - [56] - )| - 79 + 02| + 1[24]| + 2[2-4]| + 33| + [45]2| + 6[23] )| - 365?\d| - 44\d{2} - )\d{5} + 365 + )\d{6} 123123456 (?: - [46]0| + 4[04]| 5[015]| + 60| 7[07] )\d{7} @@ -2454,11 +2404,14 @@ Including 716 as well since many numbers seem to have this prefix. --> (?: - 60[0-3]| + 6(?: + 0[0-3]| + 8\d + )| 7(?: [02-68]\d| 1[0-4689]| - 7[0-6]| + 7[0-69]| 9[0-689] ) )\d{5} @@ -3060,17 +3013,24 @@ - + + + 119 + $1 $2-$3 + @@ -3088,8 +3048,11 @@ - [1-9]\d{7,9} - \d{8,10} + + [1-46-9]\d{7,10}| + 5\d{8,9} + + \d{8,11} [34]00\d{5} @@ -3118,8 +3081,9 @@ 1(?: 1(?: - [6-9]\d| - 5[347] + 5[347]| + [6-8]\d| + 9\d{1,2} )| [2-9][6-9]\d )\d{6}| @@ -3131,7 +3095,7 @@ 7[13-579] )[6-9]\d{7} - \d{10} + \d{10,11} 1161234567 @@ -3438,7 +3402,7 @@ - [12-4]\d{8}| + [1-4]\d{8}| [89]\d{9,10} @@ -3573,14 +3537,9 @@ 2221234 - - - 6(?: - [0-3]\d| - [67][01] - )\d{4} - + + 6[0-367]\d{5} \d{7} 6221234 @@ -4719,7 +4678,7 @@ + nationalPrefixForParsing="(19(?:0[0-2468]|19|66|77))" carrierCodeFormattingRule="$CC $FG"> @@ -4768,17 +4727,21 @@ 9001234567 + + 210[0-6]\d{4}| 40(?: - 00\d{4}| + [04]0\d{4}| 10[0-3]\d{3}| 2(?: 00\d| 900 )\d{2}| 3[01]\d{4}| - 5\d{5} - ) + 5\d{5}| + 70[01]\d{3} + )| + 5100\d{4} \d{8} 40001234 @@ -4789,29 +4752,34 @@ 1(?: 0(?: 00| + 15| 2[2-4679] )| 1(?: 1[0-35-9]| 37| - 46| + [46]6| 75| 8[79]| 9[0-379] )| 2(?: - 12| - 22| - 34 + 00| + [12]2| + 34| + 55 )| 333| 400| - 55[15]| + 5(?: + 15| + 5[15]| + ) 693| 7(?: 00| - 1[78]| - 22| + 1[789]| + 2[02]| [67]7 ) ) @@ -4856,11 +4824,13 @@ 2[1-4]\d{5,6}| 3(?: 1\d{6}| - [23]\d{4,6})| + [23]\d{4,6} + )| 4(?: [125]\d{5,6}| [36]\d{6}| - [78]\d{4,6})| + [78]\d{4,6} + )| 7\d{6,7} 71234567 @@ -4870,9 +4840,21 @@ \d{8} 51234567 + + + 1(?: + 1(?: + 6111| + 8 + )| + 40 + ) + + \d{3,6} + 140 + - - 10[56] + 10[456] \d{3} 106 @@ -5018,7 +5000,7 @@ 22345678 - + 9[5-79]\d{6} 96123456 @@ -5374,6 +5356,26 @@ $1 $2 $3 + + 181 + $1 $2 + + + + 18500 + $1 $2 + + + 18[68] + $1 $2 + + + 18[2-579] + $1 $2 + 700 $1 $2 $3 @@ -5482,6 +5484,19 @@ \d{11} 70012345678 + + + + 18(?: + 1\d{5,11}| + [2-9]\d{8} + ) + + \d{8,14} + 18500123456 + 11[02] \d{3} @@ -5493,26 +5508,17 @@ - - $1 $2 $3 - $1 $2 $3 $4 - - [1-8]\d{5,7} - \d{6,8} + [27]\d{7} + \d{8} - (?: - 1[05]| - [2-5]\d - )\d{4}| 2(?: 1[2-5]| 7[45]| @@ -5521,7 +5527,7 @@ 21360003 - (?:77)?[6-8]\d{5} + 77[6-8]\d{5} 77831001 @@ -5933,7 +5939,7 @@ - + [369]| 4[3-8]| @@ -6098,7 +6104,7 @@ 1(?: 0[0169]| 1[124]| - 2[0278]| + 2[0-278]| 5[0-2] )| [89]00 @@ -6115,9 +6121,12 @@ $1 $2 $3 - + - 13| + 1(?: + 3| + 5[23] + )| [4-6]| [89][2-9] @@ -6134,34 +6143,44 @@ \d{5,10} - + (?: - 1[35][23]| - 2[23]\d| - 3\d| + 1( + 3[23]\d| + 5[23] + )| + 2[2-4]\d{2}| + 3\d{2}| 4(?: - 0[2-4]| + 0[2-5]| [578][23]| 64 - )| + )\d| 5(?: - 0[234]| + 0[2-7]| [57][23] - )| - 6[24-689]3| + )\d| + 6[24-689]3\d| 8(?: - [28][2-4]| - 42| - 6[23] - )| + 2[2-57]| + 4[26]| + 6[237]| + 8[2-4] + )\d| 9(?: - [25]2| + 2[27]| 3[24]| - 6[23]| + 52| + 6[2356]| 7[2-4] - ) - )\d{6}| + )\d + )\d{5}| 1[69]\d{3} \d{5,9} @@ -6169,7 +6188,9 @@ + the old pattern for three months, so we support both here in the meantime. Adding the + extra prefix 121 from user reports that Mobinil has started allocating numbers + beginning with this prefix. --> 1(?: [0-246-9]| @@ -6178,7 +6199,7 @@ 1(?: 0[0169]| 1[124]| - 2[0278] + 2[0-278] )\d{7} \d{9,10} @@ -6361,7 +6382,7 @@ 4(?: 1[69]| 3[2-49]| - 4[0-23]| + 4[0-3]| 6[5-8] )| 5(?: @@ -7010,7 +7031,7 @@ 2[89]| 3[35-9]| 4[01]| - 5[0-347-9]| + 5[0-47-9]| [67]\d| 8[457-9]| 9[0146] @@ -7545,7 +7566,7 @@ 7640123456 + http://en.wikipedia.org/wiki/Non-geographic_telephone_numbers_in_the_United_Kingdom --> @@ -8048,13 +8069,26 @@ nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG"> - $1 $2 $3 + [235] + $1 $2 $3 + + + 8 + $1 $2 - [235]\d{6,8} + + [235]\d{8}| + 8\d{7} + \d{7,9} + + 800\d{5} + \d{8} + 80012345 + 3(?: @@ -8103,7 +8137,14 @@ \d{9} 231234567 - + + + 800\d{5} + \d{8} + 80012345 + + 19[123]| @@ -8951,10 +8992,15 @@ 21234567 - [5-79]\d{7} + [569]\d{7} \d{8} 51234567 + + 7\d{7} + \d{8} + 71234567 + 800\d{6} \d{9} @@ -8996,6 +9042,7 @@ \d{8} + 2(?: 2(?: @@ -9004,7 +9051,8 @@ [23]\d| 4[056]| 5[57]| - 9[01] + 8[0146-9]| + 9[012] )| 4(?: 2|3-59]| @@ -9358,9 +9406,15 @@ + Where known, fixed mobile prefixes have been represented as Mobile. --> - 2[124]\d{7,8}| + 2(?: + 1(?: + [0-8]\d{6,7}| + 9\d{6} + )| + [24]\d{7,8} + )| (?: 2(?: [35][1-4]| @@ -9398,7 +9452,7 @@ 6[1-8] )| 6(?: - 19? | + 19?| [25]\d| 3[1-469]| 4[1-6] @@ -9413,7 +9467,7 @@ )| 9(?: 0[12]| - 1[0134-8]| + 1[013-8]| 2[0-479]| 5[125-8]| 6[23679]| @@ -9426,7 +9480,87 @@ 612345678 - 8[1-35-9]\d{7,9} + + + (?: + 2(?: + 1(?: + 3[145]| + 4[01]| + 5[1-469]| + 60| + 8[0359]| + 9\d + )| + 2(?: + 88| + 9[1256] + )| + 3[1-4]9| + 4(?: + 36| + 91 + )| + 5(?: + 1[349]| + [2-4]9 + )| + 6[0-7]9| + 7(?: + [1-36]9| + 4[39] + )| + 8[1-5]9| + 9[1-48]9 + )| + 3(?: + 19[1-3]| + 2[12]9| + 3[13]9| + 4(?: + 1[69]| + 39 + )| + 5[14]9| + 6(?: + 1[69]| + 2[89] + )| + 709 + )| + 4[13]19| + 5(?: + 1(?: + 19| + 8[39] + )| + 4[129]9| + 6[12]9 + )| + 6(?: + 19[12]| + 2(?: + [23]9| + 77 + ) + )| + 7(?: + 1[13]9| + 2[15]9| + 419| + 5(?: + 1[89]| + 29 + )| + 6[15]9| + 7[178]9 + ) + )\d{5,6}| + 8[1-35-9]\d{7,9} + \d{9,11} 812345678 @@ -10242,8 +10376,10 @@ @@ -10253,8 +10389,8 @@ 33| 4[04]| 79 - )[2-6]\d{7}| - 80[2-46]\d{7}| + )[2-7]\d{7}| + 80[2-467]\d{7}| (?: 1(?: 2[0-249]| @@ -10327,7 +10463,7 @@ 8[34]| 91 ) - )[2-6]\d{6}| + )[2-7]\d{6}| (?: (?: 1(?: @@ -10384,9 +10520,8 @@ 2[2457]| 3[2-4]| 4[235-7]| - 5[2-689]| + [57][2-689]| 6[24-58]| - 7[23-689]| 8[1-6] )| 8(?: @@ -10416,7 +10551,7 @@ [013-8]\d ) ) - )[2-6]\d{5} + )[2-7]\d{5} \d{6,10} 1123456789 @@ -11742,7 +11877,7 @@ 9[1-578] )| 2(?: - 2[034-9]| + 2[03-9]| 3[3-58]| 4[0-468]| 5[04-8]| @@ -11789,7 +11924,7 @@ 9(?: [23]0| 4[02-46-9]| - 5[0245-79]| + 5[024-79]| 6[4-9]| 7[2-47-9]| 8[02-7]| @@ -11884,7 +12019,7 @@ 9[2-8] )| 3(?: - 7[2-56]| + 7[2-6]| [3-6][2-9]| 8[2-5] )| @@ -11904,7 +12039,7 @@ 9(?: [23]0| 4[02-46-9]| - 5[0245-79]| + 5[024-79]| 6[4-9]| 7[2-47-9]| 8[02-7]| @@ -12039,7 +12174,7 @@ 9(?: [23]0| 4[02-46-9]| - 5[0245-79]| + 5[024-79]| 6[4-9]| 7[2-47-9]| 8[02-7]| @@ -12181,7 +12316,7 @@ 9(?: [23]0| 4[02-46-9]| - 5[0245-79]| + 5[024-79]| 6[4-9]| 7[2-47-9]| 8[02-7]| @@ -12202,7 +12337,7 @@ 1| 2(?: 23| - 5[5-89]| + 5[5-9]| 64| 78| 8[39]| @@ -12482,6 +12617,7 @@ + @@ -12500,32 +12636,42 @@ - 20\d{4,7}| - [4-9]\d{5,9} + 20\d{6,7}| + [4-9]\d{6,9} - \d{4,10} + \d{5,10} + - (?: - 20| - 4[0-6]| - 5\d| - 6[0-24-9] - )\d{4,7} + 20\d{6,7}| + 4(?: + [013]\d{7}| + [24-6]\d{5,7} + )| + 5(?: + [0-36-8]\d{5,7}| + [459]\d{5} + )| + 6(?: + [08]\d{5}| + [14-79]\d{5,7}| + 2\d{7} + ) - \d{4,9} + \d{5,9} 202012345 - 7(?: - 0[0-5]| + 0[0-8]| [123]\d| - 5[0-4]| + 5[0-5]| 7[0-5]| - 8[6-9] + 8[5-9] )\d{6} \d{9} @@ -12533,32 +12679,26 @@ - 800[245-8]\d{5,6} + 800[24-8]\d{5,6} \d{9,10} 800223456 - - 9(?: - 00[2-578]| - 11\d - )\d{5} - + 900[02-578]\d{5} \d{9} 900223456 + 1(?: - 0[089]| + 0[09]| 1(?: [06]| - 99 + 9[0-2579] )| - 2[123]| - 3[013]| - 4[14]| - 501 + 2[13]| + 3[01] ) \d{3,4} @@ -12602,7 +12742,7 @@ - [356-8]\d{8,9} + [35-8]\d{8,9} \d{5,10} @@ -12733,7 +12873,7 @@ (?: 1[0-35-9]| 6[6-9]| - 7[06-89] + 7[06-9] )[1-9]| 8(?: 0[89]| @@ -13045,6 +13185,10 @@ nationalPrefix="0" nationalPrefixForParsing="0(8[1-46-8]|85\d{2})?" nationalPrefixFormattingRule="$NP$FG" carrierCodeFormattingRule="$NP$CC-$FG"> + + 11[29] + $1 + 1(?: @@ -13289,7 +13433,7 @@ (?: 5(?: - 0[0-26]| + 0[0-2568]| 5\d )| 6(?: @@ -13349,7 +13493,11 @@ [3589]\d{9} \d{7}(?:\d{3})? + + 345(?: 2(?: @@ -13363,6 +13511,7 @@ 40 )| 7(?: + 4[35-79]| 6[6-9]| 77 )| @@ -13370,8 +13519,7 @@ 00| 1[45]| 25| - 4[89]| - 88 + [48]8 )| 9(?: 14| @@ -13382,24 +13530,33 @@ 3452221234 + 345(?: - 32[3-79]| + 32[1-9]| 5(?: - 1[467]| + 1[67]| 2[5-7]| - 4[5-9] + 4[6-8]| + 76 )| 9(?: - 1[679]| - 2[4-9]| - 3[89] + 1[67]| + 2[3-9]| + 3[689] ) )\d{4} \d{10} 3453231234 + + 345849\d{4} + \d{10} + 3458491234 + 8(?: @@ -13673,7 +13830,7 @@ [89][01]| 7(?: [01]| - 6[01346-9]) + 6[013-9]) $1 $2 $3 @@ -13701,7 +13858,7 @@ 3\d| 7(?: [01]\d| - 6[01346-9] + 6[013-9] ) )\d{5} @@ -14245,7 +14402,7 @@ - [23-5]| + [2-5]| 7[1-9]| [89](?: [1-9]| @@ -14256,7 +14413,7 @@ - [23-5]| + [2-5]| 7[1-9]| [89](?: [1-9]| @@ -14625,12 +14782,15 @@ 520123456 + 6(?: - 0[0-36]| + 0[0-6]| [14-7]\d| - 2[236]| - 3[348]| + 2[23679]| + 3[03458]| + 80| 99 )\d{6} @@ -14745,7 +14905,7 @@ - [256-9]\d{7} + [25-9]\d{7} \d{8} @@ -15149,12 +15309,13 @@ \d{8} + (?: 2(?: [23]\d| 5[125]| - 61 + 6[01] )| 3(?: 1[3-6]| @@ -16536,7 +16697,7 @@ 17| 2(?: [0189]\d| - [23-6]| + [2-6]| 7\d? )| 3(?: @@ -16773,9 +16934,9 @@ 20201234 - - 9[0134678]\d{6} + + 9[0-46-9]\d{6} 93123456 @@ -17382,6 +17543,7 @@ preferredInternationalPrefix="00" nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG"> + [3467]| @@ -17389,45 +17551,52 @@ $1-$2 $3 + + + 240 + 2409 + 24099 + $1 $2 + - - + + 21 $1 $2 $3 + + + + 2(?: + 1[1-9]| + [69]| + 7[0-35-9] + )| + 86 + + $1 $2 $3 + - - 22 + latter. We follow the same pattern for 020 (Orcon) and 028 (mixed) numbers. --> + + 2[028] $1 $2 $3 - - - + + - 2[0247-9]| + 2(?: + 10| + 74 + )| 5| - [89]00 + [89]0 $1 $2 $3 - - - 2[0169]|86 - $1 $2 $3 - - - - 240 - 2409 - 24099 - $1 $2 - @@ -17450,26 +17619,25 @@ 32345678 - + 2(?: - [079]\d{7}| + [028]\d{7,8}| 1(?: 0\d{5,7}| [12]\d{5,6}| [3-9]\d{5} )| - [28]\d{7,8}| - 4[1-9]\d{6} + [79]\d{7} ) \d{8,10} 211234567 - [28]6\d{6,7} - \d{8,9} - 26123456 + [28]6\d{6,7} + \d{8,9} + 26123456 - @@ -19646,45 +19812,16 @@ \d{6,7} - - - (?: - 2(?: - 55[0-5]| - 78[013] - )| - 4(?: - 2(?: - 0[589]| - 1[03-9]| - [2-9]\d - )| - [346]\d{2} - ) - )\d{3} - + + 4[2-46]\d{5} \d{7} 4217123 - - - 2(?: - 5(?: - [0-46-9]\d| - 5[6-9] - )| - 7(?: - [0-79]\d| - 8[24-9] - )| - 8\d{2} - )\d{3} - + + 2[5-8]\d{5} \d{7} 2510123 @@ -19895,7 +20032,7 @@ 4(?: [0246]\d{5,7}| (?: - 1[01-8]| + 1[0-8]| 3[0135]| 5[14-79]| 7[0-246-9]| @@ -20387,9 +20524,9 @@ nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)"> - - $1 $2 - + + $1 $2 + [2-578]\d{7} @@ -20402,16 +20539,17 @@ + further information about Datatel can be found. Adding prefix 79 since it was launched + by Airtel on Feb 2nd 2012. --> (?: 25| 3[03]| 44| 5[056]| - 7[6-8]| + 7[6-9]| 88 - )[1-9]\d{5} + )\d{6} 25123456 @@ -20526,7 +20664,7 @@ + 3[49], 4[7-9], 7[4-7], 8[2-9] and 9\d. --> 7(?: 0[1256]0| @@ -20542,8 +20680,7 @@ )| 7(?: 01| - [12-79]\d| - 8[0139] + [1-9]\d ) )\d{5} @@ -22265,7 +22402,7 @@ \d{5,9} - + 20(?: [014]\d{2}| @@ -22707,7 +22844,7 @@ )| 4(?: 2\d| - 3[1-4579]| + 3[1-579]| 7[1-79] )| 5(?: