diff --git a/java/release_notes.txt b/java/release_notes.txt new file mode 100644 index 000000000..afc82c1aa --- /dev/null +++ b/java/release_notes.txt @@ -0,0 +1,9 @@ +July 30th, 2010 + +* Metadata change: + - new country: TL + - update to existing country: AZ, CN, FR, GH, JO, LA, PG, PK, QA, SZ, UA, VN + +* Code improvement + - China local number formatting for AsYouTypeFormatter + - improve extension parsing to handle number in the form of +1 (645) 123 1234 ext. 910# \ No newline at end of file diff --git a/java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml b/java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml index b27b53478..6ae2b91e2 100644 --- a/java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml +++ b/java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml @@ -668,7 +668,7 @@ - 1[28]|22|[4-8] + 1[28]|22|[3-8] $1 $2 $3 @@ -677,11 +677,11 @@ - [124-8]\d{7,8} + [1-8]\d{7,8} \d{8,9} - (?:1(?:(?:[28]\d|36|9)\d|02|1[0-589]|3[358]|4[013-79]|5[0-479]|6[0236-9]|7[0-24-8])|2(?:16|2\d|3[0-24]|4[1468]|55|6[56]|79))\d{5} + (?:1(?:(?:[28]\d|9)\d|02|1[0-589]|3[358]|4[013-79]|5[0-479]|6[0236-9]|7[0-24-8])|2(?:16|2\d|3[0-24]|4[1468]|55|6[56]|79)|365?\d)\d{5} 123123456 @@ -1649,6 +1649,21 @@ + + 80[2678] + $1 $2 + + + + + [2-9] + $1 $2 + 21 @@ -1663,21 +1678,21 @@ $1 $2 $3 - 80 - $1 $2 + pattern="(\d{3})(\d{4})(\d{4})"> + 3(?:11|7[159])|4[135]1|5(?:1|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09])|898 + $1 $2 $3 - [35-79]|[48][1-9] + pattern="(\d{3})(\d{3})(\d{4})"> + 3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7[0-46-9]|8[23])|5(?:3[03-9]|4[36]|5|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|[37]|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5]) $1 $2 $3 1[3-58] $1 $2 $3 - - 40 + + [48]00 $1 $2 $3 @@ -1686,6 +1701,45 @@ 10800 $1 $2 $3 + + 21 + $1 $2 $3 + + + 10[1-9]|2[02-9] + + 10[1-9]|2[02-9] + 10(?:[1-79]|8(?:[1-9]|0[1-9]))|2[02-9] + $1 $2 $3 + + + 80[2678] + $1 $2 + + + 3(?:11|7[159])|4[135]1|5(?:1|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09])|898 + $1 $2 $3 + + + 3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7[0-46-9]|8[23])|5(?:3[03-9]|4[36]|5|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|[37]|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5]) + $1 $2 $3 + + + 1[3-58] + $1 $2 $3 + + + [48]00 + $1 $2 $3 + + + 108 + 1080 + 10800 + $1 $2 $3 + [1-79]\d{7,11}|8[0-357-9]\d{6,9} @@ -1705,9 +1759,9 @@ collected from searching the web. --> - 10800\d{7} - \d{12} - 108001234567 + (?:10)?800\d{7} + \d{10,12} + 8001234567 16[08]\d{5} @@ -2385,6 +2439,7 @@ @@ -2696,39 +2751,28 @@ - + - - [27][12]|4[12]|[35689]1 - $1 $2 - - - 25|31|[4-9] - $1 $2 - - - 2[0346-8]|3[02-9]|54 - $1 $2 $3 + + $1 $2 $3 - [2-9]\d{4,8} - \d{5,9} + [235]\d{6,8} + \d{7,9} - - (?:251|3[467]2|41|5(?:[36]1|[78]2)|61|882|9(?:1|6[268]))\d{3}|(?:31[24]|567|6(?:1|5[23])|7(?:2|43)|9(?:1|35))\d{4}|(?:2[12]|3(?:45|9[24])|4(?:2|32])|5(?:1|6[58])|64[28]|7(?:1[567]?|46|5[26]|62)|8(?:1|4[268]|7[26])|9(?:31|53))\d{5}|(?:2[12]|42|51)\d{6}|3\d{8} - \d{5,9} - 251234 + 3(?:0[237]\d|[167](?:2[0-6]|7\d)|2(?:2[0-5]|7\d)|3(?:2[0-37]|7\d)|4(?:[27]\d|30)|5(?:2[0-7]|7\d)|8(?:2[0-2]|7\d)|9(?:20|7\d))\d{5} + \d{7,9} + 302345678 - 2(?:755\d{4}|(?:4\d?|08)\d{6}|[368]\d{7})|54\d{7} - \d{8,9} - 27551234 + 2((?:[47]\d|08)\d{6}|[368]\d{7})|54\d{7} + \d{9} + 231234567 @@ -3816,7 +3860,7 @@ $1 $2 $3 - 7[47-9] + 7[457-9] $1 $2 $3 $4 $5 @@ -3829,14 +3873,14 @@ \d{7,9} - (?:[2356][2-8])\d{6} + [2356][2-8]\d{6} \d{7,8} 62345678 - - 7(?:4[5-7]|7[5-79]|8[5-8]|9[05-9])\d{6} + 7(?:4[5-7]|55|7[5-79]|8[5-8]|9[05-9])\d{6} \d{9} 790123456 @@ -4353,8 +4397,12 @@ - - 20 + + 20[23] + $1 $2 $3 $4 + + + 20[579] $1 $2 $3 $4 @@ -4363,8 +4411,8 @@ - [2-57]\d{7,8} - \d{6,9} + [2-57]\d{7,9} + \d{6,10} (?:[2-57]1|54)\d{6} @@ -4372,10 +4420,8 @@ 21212862 - - 20[2357-9]\d{6} - \d{9} + 20(?:[23]|5[4-6]|77|9[89])\d{6} + \d{9,10} 202345678 @@ -5899,8 +5945,8 @@ - (?:3\d{2}|4[257]\d|5[34]\d|6[24]9|85[02-46-9]|9[78]\d)\d{4} + 47X range prescribed by the plan. The same applies to extra 64X numbers. --> + (?:3\d{2}|4[257]\d|5[34]\d|6(?:29|4[1-9])|85[02-46-9]|9[78]\d)\d{4} \d{7} 3123456 @@ -5997,31 +6043,69 @@ + nationalPrefix="0" nationalPrefixFormattingRule="($NP$FG)"> - - 2[25]|4[0146-9]|5[1-35-8]|6[1-8]|7[14]|8[16]|91 - $1 $2 $3 + + + (?: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 + $1 $2 $3 $4 - - 21|42 - $1 $2 $3 + + (?:2[349]|45|54|60|72|8[2-5]|9[2-9]) + (?:2[349]|45|54|60|72|8[2-5]|9[2-9])\d1 + (?:2[349]|45|54|60|72|8[2-5]|9[2-9])\d11 + (?:2[349]|45|54|60|72|8[2-5]|9[2-9])\d111 + $1 $2 $3 $4 + + + (?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9] + $1 $2 + + + 2[349]|45|54|60|72|8[2-5]|9[2-9] + (?:2[349]|45|54|60|72|8[2-5]|9[2-9])\d[2-9] + $1 $2 + + + 3 + $1 $2 + + + 58[12]|1 + $1 $2 + + + + 586 + $1 $2 - - 2[349]|3|45|54|60|72|8[02-5]|9[02-9] + + [89]00 $1 $2 $3 - [2-9]\d{7,9} - \d{7,10} + + 1\d{8}|[2-8]\d{5,11}|9(?:[013-9]\d{4,9}|2\d(?:111\d{6}|\d{3,7})) + \d{6,12} - (?:21|42)\d{8}|(?:2(?:[25]|3[2358]|4[2-4]|9[78])|4(?:[0146-9]|5[3479])|5(?:[1-35-8]|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|2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8]))\d{7} - 2112345678 + + (?:21|42)[2-9]\d{7}|(?:2[25]|4[0146-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\d{6}|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8]))[2-9]\d{5,6}|58[126]\d{7} + \d{6,10} + 2123456789 - 3[0-6]\d{8} + 3(?:0\d|1[2-5]|2[1-3]|3[1-6]|4[2-6]|64)\d{7} \d{10} 3012345678 @@ -6035,6 +6119,23 @@ \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 + + + + 122\d{6} + \d{9} + + 122044444 + @@ -6170,25 +6271,30 @@ - + + 8 + $1 $2 + + + [3-7] $1 $2 - [3-8]\d{6} - \d{7} + [3-8]\d{6,7} + \d{7,8} - 4\d{6} - 4123456 + 44\d{6} + 44123456 - [35-7]\d{6} - 3123456 + (?:33|55|66|77)\d{6} + 33123456 - 80\d{5} - 8012345 + 800\d{4} + 8001234 @@ -6903,8 +7009,8 @@ - + @@ -6927,10 +7033,8 @@ 2171234 - (?:6|7[67])\d{6} - 6012345 + 76123456 @@ -7133,8 +7237,38 @@ - + + + + + $1 $2 + + + + [2-47-9]\d{6} + \d{7} + + + (?:2[1-5]|3[1-9]|4[1-4])\d{5} + 2112345 + + + 7[2-4]\d{5} + 7212345 + + + 80\d{5} + 8012345 + + + 90\d{5} + 9012345 + + + 70\d{5} + 7012345 + @@ -7373,7 +7507,8 @@ Google searches and regression tests to reverse-engineer these rules. --> - 39|4(?:[45][0-5]|87)|5(?:0|67|7[37])|6[36-8]|9[1-9] + 39|4(?:[45][0-5]|87)|5(?:0|6[37]|7[37])|6[36-8]|9[1-9] + 39|4(?:[45][0-5]|87)|5(?:0|6(?:3[14-7]|7)|7[37])|6[36-8]|9[1-9] $1 $2 $3 @@ -7383,7 +7518,7 @@ 3(?:5[013-9]|[1-46-8])|4(?:[137][013-9]|6|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6[0135-9]|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8]) - 3(?:5[013-9]|[1-46-8](?:22|[013-9]))|4(?:[137][013-9]|6|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6[0135-9]|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8]) + 3(?:5[013-9]|[1-46-8](?:22|[013-9]))|4(?:[137][013-9]|6|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6(?:3[02389]|[015689])|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8]) $1 $2 @@ -7697,6 +7832,7 @@ + @@ -7712,15 +7848,15 @@ 80 $1 $2 - - 693 + + 69 $1 $2 2[1348]|3[25]|5[01]|65|7[18] $1 $2 $3 - + 9 $1 $2 $3 $4 @@ -7739,14 +7875,14 @@ \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}|(?:80|69[3-5])\d{5} + (?: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[0-8]|1(?:2\d|6[3-9]|99))\d{7} + (?:9\d|1(?:2[1-35-9]|6[3-9]|99))\d{7} \d{9,10} 912345678 diff --git a/java/resources/com/google/i18n/phonenumbers/test/PhoneNumberMetaDataForTesting.xml b/java/resources/com/google/i18n/phonenumbers/test/PhoneNumberMetaDataForTesting.xml index ea0e0ea1a..012cf0eda 100644 --- a/java/resources/com/google/i18n/phonenumbers/test/PhoneNumberMetaDataForTesting.xml +++ b/java/resources/com/google/i18n/phonenumbers/test/PhoneNumberMetaDataForTesting.xml @@ -127,7 +127,9 @@ nationalPrefix="0" preferredInternationalPrefix="0011" nationalPrefixFormattingRule="$NP$FG"> - + + 1 $1 $2 $3 diff --git a/java/src/com/google/i18n/phonenumbers/PhoneNumberMetadataProto b/java/src/com/google/i18n/phonenumbers/PhoneNumberMetadataProto index 56a2e1f43..c003b67f2 100644 Binary files a/java/src/com/google/i18n/phonenumbers/PhoneNumberMetadataProto and b/java/src/com/google/i18n/phonenumbers/PhoneNumberMetadataProto differ diff --git a/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java b/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java index 4f91588c2..2bd552a74 100644 --- a/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java +++ b/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java @@ -247,7 +247,7 @@ public class PhoneNumberUtil { // part of the extension, or else parsing will fail! private static final String KNOWN_EXTN_PATTERNS = "[ \u00A0\\t,]*(?:ext(?:ensio)?n?|" + "\uFF45\uFF58\uFF54\uFF4E?|[,x\uFF58#\uFF03~\uFF5E]|int|anexo|\uFF49\uFF4E\uFF54)" + - "[:\\.\uFF0E]?[ \u00A0\\t,-]*([" + VALID_DIGITS + "]{1,7})|[- ]+([" + VALID_DIGITS + + "[:\\.\uFF0E]?[ \u00A0\\t,-]*([" + VALID_DIGITS + "]{1,7})#?|[- ]+([" + VALID_DIGITS + "]{1,5})#"; // Regexp of all known extension prefixes used by different countries followed by 1 or more valid diff --git a/java/test/com/google/i18n/phonenumbers/PhoneNumberMetadataProtoForTesting b/java/test/com/google/i18n/phonenumbers/PhoneNumberMetadataProtoForTesting index 7f085cffa..e3ae11d8c 100644 Binary files a/java/test/com/google/i18n/phonenumbers/PhoneNumberMetadataProtoForTesting and b/java/test/com/google/i18n/phonenumbers/PhoneNumberMetadataProtoForTesting differ diff --git a/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java b/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java index e6af641b2..535c6d63e 100644 --- a/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java +++ b/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java @@ -1609,6 +1609,8 @@ public class PhoneNumberUtilTest extends TestCase { usWithExtension.clear(); usWithExtension.setCountryCode(1).setNationalNumber(6451231234L).setExtension("910"); assertEquals(usWithExtension, phoneUtil.parse("+1 (645) 123 1234-910#", "US")); + // Retry with the same number in a slightly different format. + assertEquals(usWithExtension, phoneUtil.parse("+1 (645) 123 1234 ext. 910#", "US")); } public void testParseAndKeepRaw() throws Exception {