diff --git a/javascript/README b/javascript/README index 5d96a917d..3d3b23edb 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 325). +The JavaScript library is ported from the Java implementation (revision 348). 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 5965e7a00..3e121eda6 100644 --- a/javascript/i18n/phonenumbers/asyoutypeformatter.js +++ b/javascript/i18n/phonenumbers/asyoutypeformatter.js @@ -93,10 +93,19 @@ i18n.phonenumbers.AsYouTypeFormatter = function(regionCode) { */ this.accruedInputWithoutFormatting_ = new goog.string.StringBuffer(); /** + * This indicates whether AsYouTypeFormatter is currently doing the + * formatting. * @type {boolean} * @private */ this.ableToFormat_ = true; + /** + * Set to true when users enter their own formatting. AsYouTypeFormatter will + * do no formatting at all when this is set to true. + * @type {boolean} + * @private + */ + this.inputHasFormatting_ = false; /** * @type {boolean} * @private @@ -134,10 +143,20 @@ i18n.phonenumbers.AsYouTypeFormatter = function(regionCode) { */ this.positionToRemember_ = 0; /** + * This contains anything that has been entered so far preceding the national + * significant number, and it is formatted (e.g. with space inserted). For + * example, this can contain IDD, country code, and/or NDD, etc. * @type {!goog.string.StringBuffer} * @private */ this.prefixBeforeNationalNumber_ = new goog.string.StringBuffer(); + /** + * This contains the national prefix that has been extracted. It contains only + * digits without formatting. + * @type {string} + * @private + */ + this.nationalPrefixExtracted_ = ''; /** * @type {!goog.string.StringBuffer} * @private @@ -276,6 +295,9 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.maybeCreateNewTemplate_ = } if (this.createFormattingTemplate_(numberFormat)) { this.currentFormattingPattern_ = pattern; + // With a new formatting template, the matched position using the old + // template needs to be reset. + this.lastMatchPosition_ = 0; return true; } } @@ -440,8 +462,10 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.clear = function() { this.lastMatchPosition_ = 0; this.currentFormattingPattern_ = ''; this.prefixBeforeNationalNumber_.clear(); + this.nationalPrefixExtracted_ = ''; this.nationalNumber_.clear(); this.ableToFormat_ = true; + this.inputHasFormatting_ = false; this.positionToRemember_ = 0; this.originalPosition_ = 0; this.isInternationalFormatting_ = false; @@ -507,14 +531,31 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype. // digit, or a plus sign (accepted at the start of the number only). if (!this.isDigitOrLeadingPlusSign_(nextChar)) { this.ableToFormat_ = false; + this.inputHasFormatting_ = true; + } else { + nextChar = this.normalizeAndAccrueDigitsAndPlusSign_(nextChar, + rememberPosition); } if (!this.ableToFormat_) { + // When we are unable to format because of reasons other than that + // formatting chars have been entered, it can be due to really long IDDs or + // NDDs. If that is the case, we might be able to do formatting again after + // extracting them. + if (this.inputHasFormatting_) { + return this.accruedInput_.toString(); + } else if (this.attemptToExtractIdd_()) { + if (this.attemptToExtractCountryCallingCode_()) { + return this.attemptToChoosePatternWithPrefixExtracted_(); + } + } else if (this.ableToExtractLongerNdd_()) { + // Add an additional space to separate long NDD and national significant + // number for readability. + this.prefixBeforeNationalNumber_.append(' '); + return this.attemptToChoosePatternWithPrefixExtracted_(); + } return this.accruedInput_.toString(); } - nextChar = this.normalizeAndAccrueDigitsAndPlusSign_(nextChar, - rememberPosition); - // We start to attempt to format only when at least MIN_LEADING_DIGITS_LENGTH // digits (the plus sign is counted as a digit as well for this purpose) have // been entered. @@ -527,12 +568,12 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype. if (this.attemptToExtractIdd_()) { this.isExpectingCountryCallingCode_ = true; } else { - // No IDD or plus sign is found, must be entering in national format. - this.removeNationalPrefixFromNationalNumber_(); + // No IDD or plus sign is found, might be entering in national format. + this.nationalPrefixExtracted_ = + this.removeNationalPrefixFromNationalNumber_(); return this.attemptToChooseFormattingPattern_(); } - case 4: - case 5: + default: if (this.isExpectingCountryCallingCode_) { if (this.attemptToExtractCountryCallingCode_()) { this.isExpectingCountryCallingCode_ = false; @@ -540,15 +581,6 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype. return this.prefixBeforeNationalNumber_.toString() + this.nationalNumber_.toString(); } - // We make a last attempt to extract a country calling code at the 6th digit - // because the maximum length of IDD and country calling code are both 3. - case 6: - if (this.isExpectingCountryCallingCode_ && - !this.attemptToExtractCountryCallingCode_()) { - this.ableToFormat_ = false; - return this.accruedInput_.toString(); - } - default: if (this.possibleFormats_.length > 0) { // The formatting pattern is already chosen. /** @type {string} */ @@ -575,6 +607,55 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype. }; +/** + * @return {string} + * @private + */ +i18n.phonenumbers.AsYouTypeFormatter.prototype. + attemptToChoosePatternWithPrefixExtracted_ = function() { + + this.ableToFormat_ = true; + this.isExpectingCountryCallingCode_ = false; + this.possibleFormats_ = []; + return this.attemptToChooseFormattingPattern_(); +}; + + +/** + * Some national prefixes are a substring of others. If extracting the shorter + * NDD doesn't result in a number we can format, we try to see if we can extract + * a longer version here. + * @return {boolean} + * @private + */ +i18n.phonenumbers.AsYouTypeFormatter.prototype.ableToExtractLongerNdd_ = + function() { + if (this.nationalPrefixExtracted_.length > 0) { + // Put the extracted NDD back to the national number before attempting to + // extract a new NDD. + /** @type {string} */ + var nationalNumberStr = this.nationalNumber_.toString(); + this.nationalNumber_.clear(); + this.nationalNumber_.append(this.nationalPrefixExtracted_); + this.nationalNumber_.append(nationalNumberStr); + // Remove the previously extracted NDD from prefixBeforeNationalNumber. We + // cannot simply set it to empty string because people sometimes enter + // national prefix after country code, e.g +44 (0)20-1234-5678. + /** @type {string} */ + var prefixBeforeNationalNumberStr = + this.prefixBeforeNationalNumber_.toString(); + /** @type {number} */ + var indexOfPreviousNdd = prefixBeforeNationalNumberStr.lastIndexOf( + this.nationalPrefixExtracted_); + this.prefixBeforeNationalNumber_.clear(); + this.prefixBeforeNationalNumber_.append( + prefixBeforeNationalNumberStr.substring(0, indexOfPreviousNdd)); + } + return this.nationalPrefixExtracted_ != + this.removeNationalPrefixFromNationalNumber_(); +}; + + /** * @param {string} nextChar * @return {boolean} @@ -710,6 +791,9 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.inputAccruedNationalNumber_ = /** + * Returns the national prefix extracted, or an empty string if it is not + * present. + * @return {string} * @private */ i18n.phonenumbers.AsYouTypeFormatter.prototype. @@ -724,7 +808,7 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype. startOfNationalNumber = 1; this.prefixBeforeNationalNumber_.append('1 '); this.isInternationalFormatting_ = true; - } else if (this.currentMetaData_.hasNationalPrefix()) { + } else if (this.currentMetaData_.hasNationalPrefixForParsing()) { /** @type {RegExp} */ var nationalPrefixForParsing = new RegExp( '^(?:' + this.currentMetaData_.getNationalPrefixForParsing() + ')'); @@ -742,6 +826,7 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype. } this.nationalNumber_.clear(); this.nationalNumber_.append(nationalNumber.substring(startOfNationalNumber)); + return nationalNumber.substring(0, startOfNationalNumber); }; @@ -772,6 +857,7 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.attemptToExtractIdd_ = this.nationalNumber_.clear(); this.nationalNumber_.append( accruedInputWithoutFormatting.substring(startOfCountryCallingCode)); + this.prefixBeforeNationalNumber_.clear(); this.prefixBeforeNationalNumber_.append( accruedInputWithoutFormatting.substring(0, startOfCountryCallingCode)); if (accruedInputWithoutFormatting.charAt(0) != diff --git a/javascript/i18n/phonenumbers/asyoutypeformatter_test.html b/javascript/i18n/phonenumbers/asyoutypeformatter_test.html index fc0ee8e33..750d20391 100644 --- a/javascript/i18n/phonenumbers/asyoutypeformatter_test.html +++ b/javascript/i18n/phonenumbers/asyoutypeformatter_test.html @@ -28,6 +28,7 @@ limitations under the License. + diff --git a/javascript/i18n/phonenumbers/asyoutypeformatter_test.js b/javascript/i18n/phonenumbers/asyoutypeformatter_test.js index 8f2814607..83d230a98 100644 --- a/javascript/i18n/phonenumbers/asyoutypeformatter_test.js +++ b/javascript/i18n/phonenumbers/asyoutypeformatter_test.js @@ -18,15 +18,22 @@ /** * @fileoverview Unit tests for the AsYouTypeFormatter. * + * Note that these tests use the metadata contained in metadatafortesting.js, + * not the normal metadata files, so should not be used for regression test + * purposes - these tests are illustrative only and test functionality. + * * @author Nikolaos Trogkanis */ goog.require('goog.testing.jsunit'); goog.require('i18n.phonenumbers.AsYouTypeFormatter'); +goog.require('i18n.phonenumbers.RegionCode'); + +var RegionCode = i18n.phonenumbers.RegionCode; function testInvalidRegion() { /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('ZZ'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.ZZ); assertEquals('+', f.inputDigit('+')); assertEquals('+4', f.inputDigit('4')); assertEquals('+48 ', f.inputDigit('8')); @@ -49,7 +56,7 @@ function testInvalidRegion() { function testInvalidPlusSign() { /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('ZZ'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.ZZ); assertEquals('+', f.inputDigit('+')); assertEquals('+4', f.inputDigit('4')); assertEquals('+48 ', f.inputDigit('8')); @@ -70,7 +77,7 @@ function testTooLongNumberMatchingMultipleLeadingDigits() { // The bug occurred last time for countries which have two formatting rules // with exactly the same leading digits pattern but differ in length. /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('ZZ'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.ZZ); assertEquals('+', f.inputDigit('+')); assertEquals('+8', f.inputDigit('8')); assertEquals('+81 ', f.inputDigit('1')); @@ -90,7 +97,7 @@ function testTooLongNumberMatchingMultipleLeadingDigits() { function testAYTFUS() { /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('US'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.US); assertEquals('6', f.inputDigit('6')); assertEquals('65', f.inputDigit('5')); assertEquals('650', f.inputDigit('0')); @@ -185,7 +192,7 @@ function testAYTFUS() { function testAYTFUSFullWidthCharacters() { /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('US'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.US); assertEquals('\uFF16', f.inputDigit('\uFF16')); assertEquals('\uFF16\uFF15', f.inputDigit('\uFF15')); assertEquals('650', f.inputDigit('\uFF10')); @@ -200,7 +207,7 @@ function testAYTFUSFullWidthCharacters() { function testAYTFUSMobileShortCode() { /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('US'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.US); assertEquals('*', f.inputDigit('*')); assertEquals('*1', f.inputDigit('1')); assertEquals('*12', f.inputDigit('2')); @@ -210,7 +217,7 @@ function testAYTFUSMobileShortCode() { function testAYTFUSVanityNumber() { /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('US'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.US); assertEquals('8', f.inputDigit('8')); assertEquals('80', f.inputDigit('0')); assertEquals('800', f.inputDigit('0')); @@ -227,7 +234,7 @@ function testAYTFUSVanityNumber() { function testAYTFAndRememberPositionUS() { /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('US'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.US); assertEquals('1', f.inputDigitAndRememberPosition('1')); assertEquals(1, f.getRememberedPosition()); assertEquals('16', f.inputDigit('6')); @@ -364,7 +371,7 @@ function testAYTFAndRememberPositionUS() { function testAYTFGBFixedLine() { /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('GB'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.GB); assertEquals('0', f.inputDigit('0')); assertEquals('02', f.inputDigit('2')); assertEquals('020', f.inputDigit('0')); @@ -382,7 +389,7 @@ function testAYTFGBFixedLine() { function testAYTFGBTollFree() { /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('GB'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.GB); assertEquals('0', f.inputDigit('0')); assertEquals('08', f.inputDigit('8')); assertEquals('080', f.inputDigit('0')); @@ -398,7 +405,7 @@ function testAYTFGBTollFree() { function testAYTFGBPremiumRate() { /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('GB'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.GB); assertEquals('0', f.inputDigit('0')); assertEquals('09', f.inputDigit('9')); assertEquals('090', f.inputDigit('0')); @@ -414,7 +421,7 @@ function testAYTFGBPremiumRate() { function testAYTFNZMobile() { /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('NZ'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.NZ); assertEquals('0', f.inputDigit('0')); assertEquals('02', f.inputDigit('2')); assertEquals('021', f.inputDigit('1')); @@ -430,7 +437,7 @@ function testAYTFNZMobile() { function testAYTFDE() { /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('DE'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.DE); assertEquals('0', f.inputDigit('0')); assertEquals('03', f.inputDigit('3')); assertEquals('030', f.inputDigit('0')); @@ -482,7 +489,7 @@ function testAYTFDE() { function testAYTFAR() { /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('AR'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.AR); assertEquals('0', f.inputDigit('0')); assertEquals('01', f.inputDigit('1')); assertEquals('011', f.inputDigit('1')); @@ -498,7 +505,7 @@ function testAYTFAR() { function testAYTFARMobile() { /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('AR'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.AR); assertEquals('+', f.inputDigit('+')); assertEquals('+5', f.inputDigit('5')); assertEquals('+54 ', f.inputDigit('4')); @@ -518,7 +525,7 @@ function testAYTFARMobile() { function testAYTFKR() { // +82 51 234 5678 /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('KR'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.KR); assertEquals('+', f.inputDigit('+')); assertEquals('+8', f.inputDigit('8')); assertEquals('+82 ', f.inputDigit('2')); @@ -608,7 +615,7 @@ function testAYTFKR() { function testAYTF_MX() { /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('MX'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.MX); // +52 800 123 4567 assertEquals('+', f.inputDigit('+')); @@ -695,7 +702,7 @@ function testAYTF_MX() { function testAYTFMultipleLeadingDigitPatterns() { // +81 50 2345 6789 /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ - var f = new i18n.phonenumbers.AsYouTypeFormatter('JP'); + var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.JP); assertEquals('+', f.inputDigit('+')); assertEquals('+8', f.inputDigit('8')); assertEquals('+81 ', f.inputDigit('1')); @@ -740,3 +747,140 @@ function testAYTFMultipleLeadingDigitPatterns() { assertEquals('+81 3332 2 567', f.inputDigit('7')); assertEquals('+81 3332 2 5678', f.inputDigit('8')); } + +function testAYTFLongIDD_AU() { + /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ + var f = new i18n.phonenumbers.AsYouTypeFormatter('AU'); + // 0011 1 650 253 2250 + assertEquals('0', f.inputDigit('0')); + assertEquals('00', f.inputDigit('0')); + assertEquals('001', f.inputDigit('1')); + assertEquals('0011', f.inputDigit('1')); + assertEquals('0011 1 ', f.inputDigit('1')); + assertEquals('0011 1 6', f.inputDigit('6')); + assertEquals('0011 1 65', f.inputDigit('5')); + assertEquals('0011 1 650', f.inputDigit('0')); + assertEquals('0011 1 650 2', f.inputDigit('2')); + assertEquals('0011 1 650 25', f.inputDigit('5')); + assertEquals('0011 1 650 253', f.inputDigit('3')); + assertEquals('0011 1 650 253 2', f.inputDigit('2')); + assertEquals('0011 1 650 253 22', f.inputDigit('2')); + assertEquals('0011 1 650 253 222', f.inputDigit('2')); + assertEquals('0011 1 650 253 2222', f.inputDigit('2')); + + // 0011 81 3332 2 5678 + f.clear(); + assertEquals('0', f.inputDigit('0')); + assertEquals('00', f.inputDigit('0')); + assertEquals('001', f.inputDigit('1')); + assertEquals('0011', f.inputDigit('1')); + assertEquals('00118', f.inputDigit('8')); + assertEquals('0011 81 ', f.inputDigit('1')); + assertEquals('0011 81 3', f.inputDigit('3')); + assertEquals('0011 81 33', f.inputDigit('3')); + assertEquals('0011 81 33 3', f.inputDigit('3')); + assertEquals('0011 81 3332', f.inputDigit('2')); + assertEquals('0011 81 3332 2', f.inputDigit('2')); + assertEquals('0011 81 3332 2 5', f.inputDigit('5')); + assertEquals('0011 81 3332 2 56', f.inputDigit('6')); + assertEquals('0011 81 3332 2 567', f.inputDigit('7')); + assertEquals('0011 81 3332 2 5678', f.inputDigit('8')); + + // 0011 244 250 253 222 + f.clear(); + assertEquals('0', f.inputDigit('0')); + assertEquals('00', f.inputDigit('0')); + assertEquals('001', f.inputDigit('1')); + assertEquals('0011', f.inputDigit('1')); + assertEquals('00112', f.inputDigit('2')); + assertEquals('001124', f.inputDigit('4')); + assertEquals('0011 244 ', f.inputDigit('4')); + assertEquals('0011 244 2', f.inputDigit('2')); + assertEquals('0011 244 25', f.inputDigit('5')); + assertEquals('0011 244 250', f.inputDigit('0')); + assertEquals('0011 244 250 2', f.inputDigit('2')); + assertEquals('0011 244 250 25', f.inputDigit('5')); + assertEquals('0011 244 250 253', f.inputDigit('3')); + assertEquals('0011 244 250 253 2', f.inputDigit('2')); + assertEquals('0011 244 250 253 22', f.inputDigit('2')); + assertEquals('0011 244 250 253 222', f.inputDigit('2')); +} + +function testAYTFLongIDD_KR() { + /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ + var f = new i18n.phonenumbers.AsYouTypeFormatter('KR'); + // 00300 1 650 253 2222 + assertEquals('0', f.inputDigit('0')); + assertEquals('00', f.inputDigit('0')); + assertEquals('003', f.inputDigit('3')); + assertEquals('0030', f.inputDigit('0')); + assertEquals('00300', f.inputDigit('0')); + assertEquals('00300 1 ', f.inputDigit('1')); + assertEquals('00300 1 6', f.inputDigit('6')); + assertEquals('00300 1 65', f.inputDigit('5')); + assertEquals('00300 1 650', f.inputDigit('0')); + assertEquals('00300 1 650 2', f.inputDigit('2')); + assertEquals('00300 1 650 25', f.inputDigit('5')); + assertEquals('00300 1 650 253', f.inputDigit('3')); + assertEquals('00300 1 650 253 2', f.inputDigit('2')); + assertEquals('00300 1 650 253 22', f.inputDigit('2')); + assertEquals('00300 1 650 253 222', f.inputDigit('2')); + assertEquals('00300 1 650 253 2222', f.inputDigit('2')); +} + +function testAYTFLongNDD_KR() { + /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ + var f = new i18n.phonenumbers.AsYouTypeFormatter('KR'); + // 08811-9876-7890 + assertEquals('0', f.inputDigit('0')); + assertEquals('08', f.inputDigit('8')); + assertEquals('088', f.inputDigit('8')); + assertEquals('0881', f.inputDigit('1')); + assertEquals('08811', f.inputDigit('1')); + assertEquals('08811-9', f.inputDigit('9')); + assertEquals('08811-98', f.inputDigit('8')); + assertEquals('08811-987', f.inputDigit('7')); + assertEquals('08811-9876', f.inputDigit('6')); + assertEquals('08811-9876-7', f.inputDigit('7')); + assertEquals('08811-9876-78', f.inputDigit('8')); + assertEquals('08811-9876-789', f.inputDigit('9')); + assertEquals('08811-9876-7890', f.inputDigit('0')); + + // 08500 11-9876-7890 + f.clear(); + assertEquals('0', f.inputDigit('0')); + assertEquals('08', f.inputDigit('8')); + assertEquals('085', f.inputDigit('5')); + assertEquals('0850', f.inputDigit('0')); + assertEquals('08500 ', f.inputDigit('0')); + assertEquals('08500 1', f.inputDigit('1')); + assertEquals('08500 11', f.inputDigit('1')); + assertEquals('08500 11-9', f.inputDigit('9')); + assertEquals('08500 11-98', f.inputDigit('8')); + assertEquals('08500 11-987', f.inputDigit('7')); + assertEquals('08500 11-9876', f.inputDigit('6')); + assertEquals('08500 11-9876-7', f.inputDigit('7')); + assertEquals('08500 11-9876-78', f.inputDigit('8')); + assertEquals('08500 11-9876-789', f.inputDigit('9')); + assertEquals('08500 11-9876-7890', f.inputDigit('0')); +} + +function testAYTFLongNDD_SG() { + /** @type {i18n.phonenumbers.AsYouTypeFormatter} */ + var f = new i18n.phonenumbers.AsYouTypeFormatter('SG'); + // 777777 9876 7890 + assertEquals('7', f.inputDigit('7')); + assertEquals('77', f.inputDigit('7')); + assertEquals('777', f.inputDigit('7')); + assertEquals('7777', f.inputDigit('7')); + assertEquals('77777', f.inputDigit('7')); + assertEquals('777777 ', f.inputDigit('7')); + assertEquals('777777 9', f.inputDigit('9')); + assertEquals('777777 98', f.inputDigit('8')); + assertEquals('777777 987', f.inputDigit('7')); + assertEquals('777777 9876', f.inputDigit('6')); + assertEquals('777777 9876 7', f.inputDigit('7')); + assertEquals('777777 9876 78', f.inputDigit('8')); + assertEquals('777777 9876 789', f.inputDigit('9')); + assertEquals('777777 9876 7890', f.inputDigit('0')); +} diff --git a/javascript/i18n/phonenumbers/metadata.js b/javascript/i18n/phonenumbers/metadata.js index 452b5567c..f2eb781e2 100644 --- a/javascript/i18n/phonenumbers/metadata.js +++ b/javascript/i18n/phonenumbers/metadata.js @@ -354,7 +354,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"AM":[,[,,"[1-35-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"] -,[,,"(?:55|77|9[1-46-9])\\d{6}","\\d{8}",,,"77123456"] +,[,,"(?:55|77|9[1-9])\\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"] @@ -606,13 +606,13 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"BE":[,[,,"[1-9]\\d{7,8}","\\d{8,9}"] ,[,,"(?:1[0-69]|[23][2-8]|[49][23]|5\\d|6[013-57-9]|7[18])\\d{6}|8(?:0[1-9]|[1-69]\\d)\\d{5}","\\d{8}",,,"12345678"] -,[,,"4(?:7\\d|8[3-9]|9[1-9])\\d{6}","\\d{9}",,,"470123456"] +,[,,"4(?:[67]\\d|8[3-9]|9[1-9])\\d{6}","\\d{9}",,,"470123456"] ,[,,"800\\d{5}","\\d{8}",,,"80012345"] ,[,,"(?:90|7[07])\\d{6}","\\d{8}",,,"90123456"] ,[,,"87\\d{6}","\\d{8}",,,"87123456"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"BE",32,"00","0",,,"0",,,,[[,"(4[7-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["4[7-9]"] +,"BE",32,"00","0",,,"0",,,,[[,"(4[6-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["4[6-9]"] ,"0$1",""] ,[,"([2-49])(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[23]|[49][23]"] ,"0$1",""] @@ -668,7 +668,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"BH":[,[,,"[136-9]\\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(?:[23469]\\d|77|8[38])|6(?:1[16]|6[03469]|9[69])|77\\d)\\d{5}","\\d{8}",,,"36001234"] +,[,,"(?:3(?:[23469]\\d|77|8[348])|6(?:1[16]|6[03469]|9[69])|77\\d)\\d{5}","\\d{8}",,,"36001234"] ,[,,"80\\d{6}","\\d{8}",,,"80123456"] ,[,,"(?:87|9[014578])\\d{6}","\\d{8}",,,"90123456"] ,[,,"84\\d{6}","\\d{8}",,,"84123456"] @@ -696,7 +696,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"BJ":[,[,,"[2689]\\d{7}|7\\d{3}","\\d{4,8}"] ,[,,"2(?:02|1[037]|2[45]|3[68])\\d{5}","\\d{8}",,,"20211234"] -,[,,"66\\d{6}|9(?:0[069]|[35][0-2457-9]|[6-8]\\d)\\d{5}","\\d{8}",,,"90011234"] +,[,,"(?:6[46]|9[03-8])\\d{6}","\\d{8}",,,"90011234"] ,[,,"7[3-5]\\d{2}","\\d{4}",,,"7312"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -764,8 +764,8 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ] ,"BR":[,[,,"[1-9]\\d{7,9}","\\d{8,10}"] -,[,,"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-5]\\d{7}","\\d{8,10}",,,"1123456789"] -,[,,"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[6-9]\\d{7}","\\d{10}",,,"1161234567"] +,[,,"1[1-9][2-5]\\d{7}|(?:[4689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-5]\\d{7}","\\d{8,10}",,,"1123456789"] +,[,,"1(?:1(?:[6-9]\\d|5[347])|[2-9][6-9]\\d)\\d{6}|(?:[4689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[6-9]\\d{7}","\\d{10}",,,"1161234567"] ,[,,"800\\d{6,7}","\\d{8,10}",,,"800123456"] ,[,,"[359]00\\d{6,7}","\\d{8,10}",,,"300123456"] ,[,,"(?:400\\d|3003)\\d{4}","\\d{8,10}",,,"40041234"] @@ -794,17 +794,17 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,,"242",[,,"NA","NA"] ,[,,"NA","NA"] ] -,"BT":[,[,,"(?:17|[2-8])\\d{6}","\\d{6,8}"] +,"BT":[,[,,"[1-8]\\d{6,7}","\\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"] +,[,,"[17]7\\d{6}","\\d{8}",,,"17123456"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"BT",975,"00",,,,,,,,[[,"(17)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1"] +,"BT",975,"00",,,,,,,,[[,"([17]7)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1|77"] ,"",""] -,[,"([2-8])(\\d{3})(\\d{3})","$1 $2 $3",["[2-8]"] +,[,"([2-8])(\\d{3})(\\d{3})","$1 $2 $3",["[2-68]|7[246]"] ,"",""] ] ,,[,,"NA","NA"] @@ -851,7 +851,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"BZ":[,[,,"[2-8]\\d{6}|0\\d{10}","\\d{7}(?:\\d{4})?"] ,[,,"[234578][02]\\d{5}","\\d{7}",,,"2221234"] -,[,,"6(?:[0-2]\\d|[67][01])\\d{4}","\\d{7}",,,"6221234"] +,[,,"6(?:[0-3]\\d|[67][01])\\d{4}","\\d{7}",,,"6221234"] ,[,,"0800\\d{7}","\\d{11}",,,"08001234123"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -955,9 +955,9 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,,,[,,"NA","NA"] ,[,,"NA","NA"] ] -,"CI":[,[,,"[02-5]\\d{7}","\\d{8}"] +,"CI":[,[,,"[02-6]\\d{7}","\\d{8}"] ,[,,"(?:2(?:0[023]|1[02357]|[23][045]|4[03-5])|3(?:0[06]|1[069]|[2-4][07]|5[09]|6[08]))\\d{5}","\\d{8}",,,"21234567"] -,[,,"(?:0[1-9]|4[04-9]|5[07]|6[067])\\d{6}","\\d{8}",,,"01234567"] +,[,,"(?:0[1-9]|4[04-9]|5[07]|6[0567])\\d{6}","\\d{8}",,,"01234567"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -987,8 +987,8 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"(?:2|32|41)\\d{7}|(?:3[3-5]|4[235]|5[1-3578]|6[13-57]|7[1-35])\\d{6,7}","\\d{6,9}",,,"21234567"] ,[,,"9[6-9]\\d{7}","\\d{8,9}",,,"961234567"] ,[,,"800\\d{6}|1230\\d{7}","\\d{9,11}",,,"800123456"] -,[,,"600\\d{7,8}","\\d{10,11}",,,"6001234567"] ,[,,"NA","NA"] +,[,,"600\\d{7,8}","\\d{10,11}",,,"6001234567"] ,[,,"NA","NA"] ,[,,"44\\d{7}","\\d{9}",,,"441234567"] ,"CL",56,"(?:0|1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))0","0",,,"0|(1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3",["2"] @@ -1007,7 +1007,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"$1",""] ] ,,[,,"NA","NA"] -,,,[,,"NA","NA"] +,,,[,,"600\\d{7,8}","\\d{10,11}",,,"6001234567"] ,[,,"NA","NA"] ] ,"CM":[,[,,"[237-9]\\d{7}","\\d{8}"] @@ -1028,7 +1028,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ] ,"CN":[,[,,"[1-79]\\d{7,11}|8[0-357-9]\\d{6,9}","\\d{4,12}"] -,[,,"21\\d{8,10}|(?:10|2[02-57-9]|3(?:11|7[179])|4(?:[15]1|3[12])|5(?:1\\d|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09]|91)|898)\\d{8}|(?:3(?:1[02-9]|35|49|5\\d|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|3[3-9]|5[2-9]|6[4789]|7\\d|8[23])|5(?:3[03-9]|4[36]|5\\d|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))\\d{7}|80(?:29|6[03578]|7[018]|81)\\d{4}","\\d{4,12}",,,"1012345678"] +,[,,"21\\d{8,10}|(?:10|2[02-57-9]|3(?:11|7[179])|4(?:[15]1|3[12])|5(?:1\\d|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09]|91)|898)\\d{8}|(?:3(?:1[02-9]|35|49|5\\d|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|3[3-9]|5[2-9]|6[4789]|7\\d|8[23])|5(?:3[03-9]|4[36]|5\\d|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[157]\\d|2[248]|3[04-9]|4[3-6]|6[2368]|9[02-9])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))\\d{7}|80(?:29|6[03578]|7[018]|81)\\d{4}","\\d{4,12}",,,"1012345678"] ,[,,"1(?:3\\d|4[57]|5[0-35-9]|8[025-9])\\d{8}","\\d{11}",,,"13123456789"] ,[,,"(?:10)?800\\d{7}","\\d{10,12}",,,"8001234567"] ,[,,"16[08]\\d{5}","\\d{8}",,,"16812345"] @@ -1233,14 +1233,14 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ] ,"DK":[,[,,"[1-9]\\d{7}","\\d{8}"] -,[,,"(?:3[2-9]|4[3-9]|5[4-9]|6[2-9]|7[02-9]|8[26-9]|9[6-9])\\d{6}","\\d{8}",,,"32123456"] -,[,,"(?:2[0-9]|3[0-2]|4[0-2]|5[0-3]|6[01]|7[12]|81|99)\\d{6}","\\d{8}",,,"20123456"] +,[,,"(?:[2-7]\\d|8[126-9]|9[6-9])\\d{6}","\\d{8}",,,"32123456"] +,[,,"(?:[2-7]\\d|8[126-9]|9[6-9])\\d{6}","\\d{8}",,,"20123456"] ,[,,"80\\d{6}","\\d{8}",,,"80123456"] ,[,,"90\\d{6}","\\d{8}",,,"90123456"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"DK",45,"00",,,,,,,,[[,"([1-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""] +,"DK",45,"00",,,,,,,1,[[,"([1-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""] ] ,,[,,"NA","NA"] ,,,[,,"NA","NA"] @@ -1248,7 +1248,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"DM":[,[,,"[57-9]\\d{9}","\\d{7}(?:\\d{3})?"] ,[,,"767(?:2(?:55|66)|4(?:2[01]|4[0-25-9])|50[0-4])\\d{4}","\\d{7}(?:\\d{3})?",,,"7674201234"] -,[,,"767(?:2(?:[2346]5|7[5-7])|31[5-7]|61[4-7])\\d{4}","\\d{10}",,,"7672251234"] +,[,,"767(?:2(?:[234689]5|7[5-7])|31[5-7]|61[2-7])\\d{4}","\\d{10}",,,"7672251234"] ,[,,"8(?:00|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"] ,[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"] ,[,,"NA","NA"] @@ -1272,7 +1272,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"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"] +,[,,"(?:5[56]|6[569]|7[7-9])\\d{7}","\\d{9}",,,"551234567"] ,[,,"800\\d{6}","\\d{9}",,,"800123456"] ,[,,"80[3-689]1\\d{5}","\\d{9}",,,"808123456"] ,[,,"80[12]1\\d{5}","\\d{9}",,,"801123456"] @@ -1291,22 +1291,22 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"EC":[,[,,"[2-9]\\d{7}|1\\d{9,10}","\\d{7,11}"] ,[,,"[2-7][2-7]\\d{6}","\\d{7,8}",,,"22123456"] -,[,,"[89]\\d{7}","\\d{8}",,,"99123456"] +,[,,"(?:69|[89]\\d)\\d{6}","\\d{8}",,,"99123456"] ,[,,"1800\\d{6,7}","\\d{10,11}",,,"18001234567"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"EC",593,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{4})","$1 $2-$3",["[2-7]"] +,"EC",593,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{4})","$1 $2-$3",["[2-57]|6[2-7]"] ,"(0$1)",""] -,[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[89]"] +,[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["69|[89]"] ,"0$1",""] ,[,"(1800)(\\d{3})(\\d{3,4})","$1 $2 $3",["1"] ,"$1",""] ] -,[[,"(\\d)(\\d{3})(\\d{4})","$1-$2-$3",["[2-7]"] +,[[,"(\\d)(\\d{3})(\\d{4})","$1-$2-$3",["[2-57]|6[2-7]"] ] -,[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[89]"] +,[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["69|[89]"] ] ,[,"(1800)(\\d{3})(\\d{3,4})","$1 $2 $3",["1"] ] @@ -1338,7 +1338,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"EG":[,[,,"1\\d{4,9}|[2456]\\d{8}|3\\d{7}|[89]\\d{8,9}","\\d{5,10}"] ,[,,"(?:1[35][23]|2[23]\\d|3\\d|4(?:0[2-4]|[578][23]|64)|5(?:0[234]|[57][23])|6[24-689]3|8(?:[28][2-4]|42|6[23])|9(?:[25]2|3[24]|6[23]|7[2-4]))\\d{6}|1[69]\\d{3}","\\d{5,9}",,,"234567890"] -,[,,"1[0-246-9]\\d{7}","\\d{9}",,,"101234567"] +,[,,"1(?:[0-246-9]|5[0-2])\\d{7}","\\d{9,10}",,,"101234567"] ,[,,"800\\d{7}","\\d{10}",,,"8001234567"] ,[,,"900\\d{7}","\\d{10}",,,"9001234567"] ,[,,"NA","NA"] @@ -1346,9 +1346,11 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,"EG",20,"00","0",,,"0",,,,[[,"(\\d)(\\d{7,8})","$1 $2",["[23]"] ,"0$1",""] -,[,"(\\d{2})(\\d{7})","$1 $2",["[14-6]|[89][2-9]"] +,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["15[0-2]|[89]00"] ,"0$1",""] -,[,"([89]00)(\\d{3})(\\d{4})","$1 $2 $3",["[89]00"] +,[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["1(?:[0-246-9]|5[3-9])"] +,"0$1",""] +,[,"(\\d{2})(\\d{7})","$1 $2",["13|[4-6]|[89][2-9]"] ,"0$1",""] ] ,,[,,"NA","NA"] @@ -1418,7 +1420,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"FJ":[,[,,"[36-9]\\d{6}|0\\d{10}","\\d{7}(?:\\d{4})?"] ,[,,"(?:3[0-5]|6[25-7]|8[58])\\d{5}","\\d{7}",,,"3212345"] -,[,,"(?:7[0-4]|9[27-9])\\d{5}","\\d{7}",,,"7012345"] +,[,,"(?:7[0-467]|8[367]|9[02346-9])\\d{5}","\\d{7}",,,"7012345"] ,[,,"0800\\d{7}","\\d{11}",,,"08001234567"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -1695,7 +1697,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ] ,"GR":[,[,,"[26-9]\\d{9}","\\d{10}"] -,[,,"2(?:1\\d{2}|2(?:3[1-8]|4[1-7]|5[1-4]|6[1-8]|7[1-5]|[289][1-9])|3(?:1\\d|2[1-5]|3[1-4]|[45][1-3]|7[1-7]|8[1-6]|9[1-79])|4(?:1\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\d|2[1-3]|4[124]|5[1-6]|[39][1-4])|6(?:1\\d|3[24]|4[1-7]|5[13-9]|[269][1-6]|7[14]|8[1-35])|7(?:1\\d|[23][1-5]|4[1-7]|5[1-57]|6[134]|9[15-7])|8(?:1\\d|2[1-5]|[34][1-4]|9[1-7]))\\d{6}","\\d{10}",,,"2123456789"] +,[,,"2(?:1\\d{2}|2(?:3[1-8]|4[1-7]|5[1-4]|6[1-8]|7[1-5]|[289][1-9])|3(?:1\\d|2[1-5]|3[1-4]|[45][1-3]|7[1-7]|8[1-6]|9[1-79])|4(?:1\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\d|2[1-3]|4[124]|5[1-6]|[39][1-4])|6(?:1\\d|3[24]|4[1-7]|5[13-9]|[269][1-6]|7[14]|8[1-35])|7(?:1\\d|2[1-5]|3[1-6]|4[1-7]|5[1-57]|6[134]|9[15-7])|8(?:1\\d|2[1-5]|[34][1-4]|9[1-7]))\\d{6}","\\d{10}",,,"2123456789"] ,[,,"69\\d{8}","\\d{10}",,,"6912345678"] ,[,,"800\\d{7}","\\d{10}",,,"8001234567"] ,[,,"90[19]\\d{7}","\\d{10}",,,"9091234567"] @@ -1805,7 +1807,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"HR":[,[,,"[1-7]\\d{5,8}|[89]\\d{6,11}","\\d{6,12}"] ,[,,"(?:1|6[029])\\d{7}|(?:2[0-3]|3[1-5]|4[02-47-9]|5[1-3])\\d{6}","\\d{6,9}",,,"12345678"] -,[,,"9[12589]\\d{6,10}","\\d{8,12}",,,"912345678"] +,[,,"9[1257-9]\\d{6,10}","\\d{8,12}",,,"912345678"] ,[,,"80[01]\\d{4,7}","\\d{7,10}",,,"8001234567"] ,[,,"6[145]\\d{4,7}","\\d{6,9}",,,"611234"] ,[,,"NA","NA"] @@ -1817,9 +1819,11 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ,[,"([2-5]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[2-5]"] ,"0$1",""] -,[,"(9[12589])(\\d{3,4})(\\d{3,4})","$1 $2 $3",["9"] +,[,"(9\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["9"] +,"0$1",""] +,[,"(9\\d)(\\d{4})(\\d{4})","$1 $2 $3",["9"] ,"0$1",""] -,[,"(9[12589])(\\d{3,4})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"] +,[,"(9\\d)(\\d{3,4})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"] ,"0$1",""] ,[,"(\\d{2})(\\d{2})(\\d{2,3})","$1 $2 $3",["6[145]|7"] ,"0$1",""] @@ -1836,7 +1840,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"HT":[,[,,"[2-489]\\d{7}","\\d{8}"] ,[,,"2(?:[24]\\d|5[1-5]|94)\\d{5}","\\d{8}",,,"22453300"] -,[,,"(?:3[2-9]|4\\d)\\d{6}","\\d{8}",,,"34101234"] +,[,,"(?:3[1-9]|4\\d)\\d{6}","\\d{8}",,,"34101234"] ,[,,"8\\d{7}","\\d{8}",,,"80012345"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -1962,13 +1966,13 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"IN":[,[,,"1\\d{7,11}|[2-9]\\d{9,10}","\\d{6,12}"] ,[,,"(?:11|2[02]|33|4[04]|79)[2-6]\\d{7}|80[2-46]\\d{7}|(?:1(?:2[0-249]|3[0-25]|4[145]|[59][14]|6[014]|7[1257]|8[01346])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[126-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:[136][25]|22|4[28]|5[12]|[78]1|9[15])|6(?:12|[2345]1|57|6[13]|7[14]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91))[2-6]\\d{6}|(?:(?:1(?:2[35-8]|3[346-9]|4[236-9]|[59][0235-9]|6[235-9]|7[34689]|8[257-9])|2(?:1[134689]|3[24-8]|4[2-8]|5[25689]|6[2-4679]|7[13-79]|8[2-479]|9[235-9])|3(?:01|1[79]|2[1-5]|4[25-8]|5[125689]|6[235-7]|7[157-9]|8[2-467])|4(?:1[14578]|2[5689]|3[2-467]|5[4-7]|6[35]|73|8[2689]|9[2389])|5(?:[16][146-9]|2[14-8]|3[1346]|4[14-69]|5[46]|7[2-4]|8[2-8]|9[246])|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24-58]|7[23-689]|8[1-6])|8(?:1[1357-9]|2[235-8]|3[03-57-9]|4[0-24-9]|5\\d|6[2457-9]|7[1-6]|8[1256]|9[2-4]))\\d|7(?:(?:1[013-9]|2[0235-9]|3[2679]|4[1-35689]|5[2-46-9]|[67][02-9]|9\\d)\\d|8(?:2[0-6]|[013-8]\\d)))[2-6]\\d{5}","\\d{6,10}",,,"1123456789"] -,[,,"(?:7(?:2(?:0[04-9]|5[09]|7[5-8]|9[389])|3(?:0[134679]|5[0-489]|7[3679]|8[3-9]|9[689])|4(?:0[4579]|1[15-9]|[29][89]|39|8[389])|5(?:0[0-5789]|[47]9|[25]0|6[6-9]|[89][7-9])|6(?:0[027]|12|20|3[19]|5[45]|6[5-9]|7[679]|9[6-9])|7(?:0[27-9]|[39][5-9]|42|60)|8(?:[03][07-9]|14|2[7-9]|4[25]|6[09]|7\\d|9[013-9]))|8(?:0[01589]\\d|1(?:[024]\\d|15|30|7[19]|97)|2(?:[2369]\\d|52|7[0135]|8[67])|3(?:0[235-8]|4[179]|74|90)|4(?:[02-58]\\d|10|6[09])|5(?:0[079]|[19]1|2\\d|30|4[47]|53|7[45])|6(?:[0589]\\d|7[09])|7(?:1[24]|[2569]\\d)|8(?:[07-9]\\d|17|2[024-8]|44|5[389]|6[0167])|9(?:[057-9]\\d|2[35-9]|3[09]|4[038]|6[0-27-9]))|9\\d{3})\\d{6}","\\d{10}",,,"9123456789"] +,[,,"(?:7(?:2(?:0[04-9]|5[09]|7[5-8]|9[389])|3(?:0[13-9]|5[0-4789]|7[3679]|8[1-9]|9[689])|4(?:0[245789]|1[15-9]|[29][89]|39|8[389])|5(?:0[0-5789]|[47]9|[25]0|6[6-9]|[89][7-9])|6(?:0[027]|12|20|3[19]|5[45]|6[5-9]|7[679]|9[6-9])|7(?:0[27-9]|[39][5-9]|42|60)|8(?:[03][07-9]|14|2[7-9]|4[25]|6[09]|7\\d|9[013-9]))|8(?:0(?:[01589]\\d|66)|1(?:[024]\\d|1[56]|30|7[19]|97)|2(?:[2369]\\d|52|7[01357]|8[567])|3(?:0[235-8]|4[14789]|74|90)|4(?:[02-58]\\d|10|6[09])|5(?:0[079]|11|2\\d|30|4[47]|53|7[45]|9[015])|6(?:[0589]\\d|7[09])|7(?:1[24]|[2569]\\d)|8(?:[07-9]\\d|17|2[024-8]|44|5[389]|6[0167])|9(?:[057-9]\\d|2[35-9]|3[09]|4[036-8]|6[0-46-9]))|9\\d{3})\\d{6}","\\d{10}",,,"9123456789"] ,[,,"1(?:600\\d{6}|800\\d{4,8})","\\d{8,12}",,,"1800123456"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"IN",91,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{2})(\\d{6})","$1 $2 $3",["7(?:2[0579]|3[057-9]|4[0-389]|5[024-9]|6[0-35-9]|7[03469]|8[0-4679])|8(?:0[01589]|1[0-479]|2[236-9]|3[0479]|4[0-68]|5[0-579]6[05789]7[12569]|8[0124-9]|9[02-9])|9","7(?:2(?:0[04-9]|5[09]|7[5-8]|9[389])|3(?:0[134679]|5[0-489]|7[3679]|8[3-9]|9[689])|4(?:0[4579]|1[15-9]|[29][89]|39|8[389])|5(?:0[0-5789]|[47]9|[25]0|6[6-9]|[89][7-9])|6(?:0[027]|12|20|3[19]|5[45]|6[5-9]|7[679]|9[6-9])|7(?:0[27-9]|3[5-9]|42|60|9[5-9])|8(?:[03][07-9]|14|2[7-9]|4[25]|6[09]|7|9[013-9]))|8(?:0[01589]|1(?:[024]|15|30|7[19]|97)|2(?:[2369]|7[0135]|8[67])|3(?:0[235-8]|4[179]|74|90)|4(?:[02-58]|10|6[09])|5(?:0[079]|[19]1|2|30|4[47]|53|7[45])|6(?:[0589]|70)|7(?:1[24]|[2569])|8(?:[07-9]|17|2[024-8]|44|5[389]|6[0167])|9(?:[057-9]|2[35-9]|3[09]|4[038]|6[0-27-9]))|9"] +,"IN",91,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{2})(\\d{6})","$1 $2 $3",["7(?:2[0579]|3[057-9]|4[0-389]|5[024-9]|6[0-35-9]|7[03469]|8[0-4679])|8(?:0[01589]|1[0-479]|2[236-9]|3[0479]|4[0-68]|5[0-579]6[05789]7[12569]|8[0124-9]|9[02-9])|9","7(?:2(?:0[04-9]|5[09]|7[5-8]|9[389])|3(?:0[13-9]|5[0-4789]|7[3679]|8[1-9]|9[689])|4(?:0[245789]|1[15-9]|[29][89]|39|8[389])|5(?:0[0-5789]|[47]9|[25]0|6[6-9]|[89][7-9])|6(?:0[027]|12|20|3[19]|5[45]|6[5-9]|7[679]|9[6-9])|7(?:0[27-9]|3[5-9]|42|60|9[5-9])|8(?:[03][07-9]|14|2[7-9]|4[25]|6[09]|7|9[013-9]))|8(?:0[01589]|1(?:[024]|1[56]|30|7[19]|97)|2(?:[2369]|7[01357]|8[567])|3(?:0[235-8]|4[14789]|74|90)|4(?:[02-58]|10|6[09])|5(?:0[079]|11|2|30|4[47]|53|7[45]|9[015])|6(?:[0589]|70)|7(?:1[24]|[2569])|8(?:[07-9]|17|2[024-8]|44|5[389]|6[0167])|9(?:[057-9]|2[35-9]|3[09]|4[03678]|6[0-46-9]))|9"] ,"0$1",""] ,[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["11|2[02]|33|4[04]|79|80[2-46]"] ,"0$1",""] @@ -2007,7 +2011,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"IQ":[,[,,"[1-7]\\d{7,9}","\\d{6,10}"] ,[,,"1\\d{7}|(?:2[13-5]|3[02367]|4[023]|5[03]|6[026])\\d{6,7}","\\d{6,9}",,,"12345678"] -,[,,"7[5-9]\\d{8}","\\d{10}",,,"7912345678"] +,[,,"7[3-9]\\d{8}","\\d{10}",,,"7912345678"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -2017,7 +2021,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ,[,"([2-6]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-6]"] ,"0$1",""] -,[,"(7[5-9]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["7"] +,[,"(7\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"] ,"0$1",""] ] ,,[,,"NA","NA"] @@ -2043,7 +2047,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"IS":[,[,,"[4-9]\\d{6}|38\\d{7}","\\d{7,9}"] ,[,,"(?: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"] -,[,,"38[59]\\d{6}|(?: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,9}",,,"6101234"] +,[,,"38[59]\\d{6}|(?:6(?:1[0-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,9}",,,"6101234"] ,[,,"800\\d{4}","\\d{7}",,,"8001234"] ,[,,"90\\d{5}","\\d{7}",,,"9011234"] ,[,,"NA","NA"] @@ -2103,7 +2107,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"JM":[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"] ,[,,"876(?:5(?:0[12]|1[0-468]|2[35]|63)|6(?:0[1-3579]|1[027]|2[3-5]|34|[45]0|63|7[05]|8[04]|9[4-9])7(?:0[2-689]|[1-6]\\d|8[056]|9[45])|9(?:0[1-8]|1[02378]|[2-8]\\d|9[2-468]))\\d{4}","\\d{7}(?:\\d{3})?",,,"8765123456"] -,[,,"876(?:(?:2[178]|[348]\\d|)\\d|5(?:27|66|[78]\\d)|7(?:0[07]|7\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579]))\\d{4}","\\d{10}",,,"8762101234"] +,[,,"876(?:2(?:[178]\\d|99)|[348]\\d{2}|5(?:08|27|66|[78]\\d)|7(?:0[07]|7\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579]))\\d{4}","\\d{10}",,,"8762101234"] ,[,,"8(?:00|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"] ,[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"] ,[,,"NA","NA"] @@ -2169,7 +2173,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,1] ,"KE":[,[,,"\\d{6,10}","\\d{4,10}"] ,[,,"(?:20|4[0-6]|5\\d|6[0-24-9])\\d{4,7}","\\d{4,9}",,,"202012345"] -,[,,"7(?:0[0-3]|[123]\\d|5[0-3]|7[0-4])\\d{6}","\\d{9}",,,"712123456"] +,[,,"7(?:0[0-5]|[123]\\d|5[0-3]|7[0-5])\\d{6}","\\d{9}",,,"712123456"] ,[,,"8(?:00|88)\\d{6,7}","\\d{9,10}",,,"800123456"] ,[,,"9(?:00|1)\\d{6,7}","\\d{8,10}",,,"900123456"] ,[,,"NA","NA"] @@ -2186,7 +2190,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"KG":[,[,,"[356-8]\\d{8,9}","\\d{5,10}"] ,[,,"(?:3(?:1(?:2\\d|3[1-9]|47|5[02]|6[1-8])|2(?:22|3[0-479]|6[0-7])|4(?:22|5[6-9]|6[0-4])|5(?:22|3[4-7]|59|6[0-5])|6(?:22|5[35-7]|6[0-3])|7(?:22|3[468]|4[1-9]|59|6\\d|7[5-7])|9(?:22|4[1-8]|6[0-8]))|6(?:09|12|2[2-4])\\d)\\d{5}","\\d{5,10}",,,"312123456"] -,[,,"5[124-7]\\d{7}|7(?:0[05]|7\\d)\\d{6}","\\d{9}",,,"700123456"] +,[,,"5[124-7]\\d{7}|7(?:0[0-357-9]|7\\d)\\d{6}","\\d{9}",,,"700123456"] ,[,,"800\\d{6,7}","\\d{9,10}",,,"800123456"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -2205,7 +2209,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"KH":[,[,,"[1-9]\\d{7,9}","\\d{6,10}"] ,[,,"(?:2[3-6]|3[2-6]|4[2-4]|[567][2-5])[2-46-9]\\d{5}","\\d{6,8}",,,"23456789"] -,[,,"(?:(?:1[0-35-9]|6[6-9]|7[06-89]|9\\d)[1-9]|8(?:0[89]|5[2-689]|8\\d{2}|[1349]\\d|))\\d{5}","\\d{8,9}",,,"91234567"] +,[,,"(?:(?:1[0-35-9]|6[6-9]|7[06-89]|9\\d)[1-9]|8(?:0[89]|5[2-689]|8\\d{2}|[13469]\\d|))\\d{5}","\\d{8,9}",,,"91234567"] ,[,,"1800(?:1\\d|2[019])\\d{4}","\\d{10}",,,"1800123456"] ,[,,"1900(?:1\\d|2[09])\\d{4}","\\d{10}",,,"1900123456"] ,[,,"NA","NA"] @@ -2279,7 +2283,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,,,[,,"2(?:[0-24-9]\\d{2}|3(?:[0-79]\\d|8[02-9]))\\d{4}","\\d{8}",,,"23821234"] ,[,,"NA","NA"] ] -,"KR":[,[,,"[1-79]\\d{3,9}|8\\d{8}","\\d{4,10}"] +,"KR":[,[,,"[1-7]\\d{3,9}|8\\d{8}","\\d{4,10}"] ,[,,"(?:2|[34][1-3]|5[1-5]|6[1-4])(?:1\\d{2,3}|[2-9]\\d{6,7})","\\d{4,10}",,,"22123456"] ,[,,"1[0-25-9]\\d{7,8}","\\d{9,10}",,,"1023456789"] ,[,,"80\\d{7}","\\d{9}",,,"801234567"] @@ -2289,7 +2293,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"70\\d{8}","\\d{10}",,,"7012345678"] ,"KR",82,"00(?:[124-68]|[37]\\d{2})","0",,,"0(8[1-46-8]|85\\d{2})?",,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["1(?:0|1[19]|[69]9|5[458])|[57]0","1(?:0|1[19]|[69]9|5(?:44|59|8))|[57]0"] ,"0$1","0$CC-$1"] -,[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1(?:[169][2-8]|[78]|5[1-4])|[68]0|[3-9][1-9][2-9]","1(?:[169][2-8]|[78]|5(?:[1-3]|4[56]))|[68]0|[3-9][1-9][2-9]"] +,[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1(?:[169][2-8]|[78]|5[1-4])|[68]0|[3-6][1-9][2-9]","1(?:[169][2-8]|[78]|5(?:[1-3]|4[56]))|[68]0|[3-6][1-9][2-9]"] ,"0$1","0$CC-$1"] ,[,"(\\d{3})(\\d)(\\d{4})","$1-$2-$3",["131","1312"] ,"0$1","0$CC-$1"] @@ -2305,7 +2309,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1","0$CC-$1"] ,[,"(\\d)(\\d{3,4})","$1-$2",["21[0-46-9]"] ,"0$1","0$CC-$1"] -,[,"(\\d{2})(\\d{3,4})","$1-$2",["[3-9][1-9]1","[3-9][1-9]1(?:[0-46-9])"] +,[,"(\\d{2})(\\d{3,4})","$1-$2",["[3-6][1-9]1","[3-6][1-9]1(?:[0-46-9])"] ,"0$1","0$CC-$1"] ,[,"(\\d{4})(\\d{4})","$1-$2",["1(?:5[46-9]|6[04678])","1(?:5(?:44|66|77|88|99)|6(?:00|44|6[16]|70|88))"] ,"$1","0$CC-$1"] @@ -2357,7 +2361,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"LA":[,[,,"[2-57]\\d{7,9}","\\d{6,10}"] ,[,,"(?:[2-57]1|54)\\d{6}","\\d{6,8}",,,"21212862"] -,[,,"20(?:2[23]|5[4-6]|77|9[89])\\d{6}","\\d{10}",,,"2023123456"] +,[,,"20(?:2[23]|5[4-68]|7[78]|9[7-9])\\d{6}","\\d{10}",,,"2023123456"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -2374,7 +2378,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"LB":[,[,,"[13-9]\\d{6,7}","\\d{7,8}"] ,[,,"(?:[14-6]\\d{2}|7(?:[2-57-9]\\d|62)|[89][2-9]\\d)\\d{4}","\\d{7}",,,"1123456"] -,[,,"(?:3\\d|7(?:[01]\\d|6[167]))\\d{5}","\\d{7,8}",,,"71123456"] +,[,,"(?:3\\d|7(?:[01]\\d|6[136-9]))\\d{5}","\\d{7,8}",,,"71123456"] ,[,,"NA","NA"] ,[,,"9[01]\\d{6}","\\d{8}",,,"90123456"] ,[,,"8[01]\\d{6}","\\d{8}",,,"80123456"] @@ -2382,7 +2386,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,"LB",961,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[13-6]|7(?:[2-57-9]|62)|[89][2-9]"] ,"0$1",""] -,[,"([7-9]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[89][01]|7(?:[01]|6[167])"] +,[,"([7-9]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[89][01]|7(?:[01]|6[136-9])"] ,"0$1",""] ] ,,[,,"NA","NA"] @@ -2439,9 +2443,9 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,,,[,,"NA","NA"] ,[,,"NA","NA"] ] -,"LR":[,[,,"(?:[279]\\d|[4-6]|[38]\\d{2})\\d{6}","\\d{7,9}"] +,"LR":[,[,,"(?:[29]\\d|[4-6]|7\\d{1,2}|[38]\\d{2})\\d{6}","\\d{7,9}"] ,[,,"2\\d{7}","\\d{8}",,,"21234567"] -,[,,"(?:4[67]|5\\d|6[4-8]|7\\d{2}|880\\d)\\d{5}","\\d{7,9}",,,"4612345"] +,[,,"(?:4[67]|5\\d|6[4-8]|7(?:76\\d|\\d{2})|880\\d)\\d{5}","\\d{7,9}",,,"4612345"] ,[,,"NA","NA"] ,[,,"90\\d{6}","\\d{8}",,,"90123456"] ,[,,"NA","NA"] @@ -2449,6 +2453,8 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"33200\\d{4}","\\d{9}",,,"332001234"] ,"LR",231,"00","0",,,"0",,,,[[,"([279]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[279]"] ,"0$1",""] +,[,"(7\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["7"] +,"0$1",""] ,[,"([4-6])(\\d{3})(\\d{3})","$1 $2 $3",["[4-6]"] ,"0$1",""] ,[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[38]"] @@ -2552,7 +2558,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"MA":[,[,,"[5689]\\d{8}","\\d{9}"] ,[,,"5(?:2(?:(?:[015-7]\\d|2[2-9]|3[2-57]|4[2-8]|8[235-9]|)\\d|9(?:0\\d|[89]0))|3(?:(?:[0-4]\\d|[57][2-9]|6[235-8]|9[3-9])\\d|8(?:0\\d|[89]0)))\\d{4}","\\d{9}",,,"520123456"] -,[,,"6(?:0[06]|[14-7]\\d|2[236]|33|99)\\d{6}","\\d{9}",,,"650123456"] +,[,,"6(?:0[0-36]|[14-7]\\d|2[236]|3[348]|99)\\d{6}","\\d{9}",,,"650123456"] ,[,,"80\\d{7}","\\d{9}",,,"801234567"] ,[,,"89\\d{7}","\\d{9}",,,"891234567"] ,[,,"NA","NA"] @@ -2592,7 +2598,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"MD":[,[,,"[256-9]\\d{7}","\\d{8}"] ,[,,"(?:2(?:1[0569]|2\\d|3[015-7]|4[1-46-9]|5[0-24689]|6[2-589]|7[1-37]|9[1347-9])|5(?:33|5[257]))\\d{5}","\\d{5,8}",,,"22212345"] -,[,,"(?:6(?:0[0-3]|50|7[12]|[89]\\d)|7(?:80|9\\d))\\d{5}","\\d{8}",,,"65012345"] +,[,,"(?:6(?:50|7[1-4]|[089]\\d)|7[89]\\d)\\d{5}","\\d{8}",,,"65012345"] ,[,,"800\\d{5}","\\d{8}",,,"80012345"] ,[,,"90[056]\\d{5}","\\d{8}",,,"90012345"] ,[,,"808\\d{5}","\\d{8}",,,"80812345"] @@ -2687,7 +2693,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"ML":[,[,,"[246-8]\\d{7}","\\d{8}"] ,[,,"(?:2(?:0(?:2[0-589]|7[027-9])|1(?:2[5-7]|[3-689]\\d))|442\\d)\\d{4}","\\d{8}",,,"20212345"] -,[,,"(?:6(?:[569]\\d)|7(?:[08][1-9]|[3579][0-4]|4[014-7]|6\\d))\\d{5}","\\d{8}",,,"65012345"] +,[,,"(?:6(?:[3569]\\d)|7(?:[08][1-9]|[3579][0-4]|4[014-7]|[16]\\d))\\d{5}","\\d{8}",,,"65012345"] ,[,,"800\\d{5}","\\d{8}",,,"80012345"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -2749,7 +2755,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"MO":[,[,,"[268]\\d{7}","\\d{8}"] ,[,,"(?:28[2-57-9]|8[2-57-9]\\d)\\d{5}","\\d{8}",,,"28212345"] -,[,,"6[26]\\d{6}","\\d{8}",,,"66123456"] +,[,,"6[236]\\d{6}","\\d{8}",,,"66123456"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -2891,9 +2897,9 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"01 $1",""] ,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2467]|3[12457-9]|5[89]|8[02-9]|9[0-35-9]"] ,"01 $1",""] -,[,"(1)([358]\\d)(\\d{4})(\\d{4})","045 $2 $3 $4",["1(?:33|55|81)"] +,[,"(1)([358]\\d)(\\d{4})(\\d{4})","044 $2 $3 $4",["1(?:33|55|81)"] ,"$1",""] -,[,"(1)(\\d{3})(\\d{3})(\\d{4})","045 $2 $3 $4",["1(?:[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9])"] +,[,"(1)(\\d{3})(\\d{3})(\\d{4})","044 $2 $3 $4",["1(?:[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9])"] ,"$1",""] ] ,[[,"([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["33|55|81"] @@ -2911,7 +2917,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"MY":[,[,,"[13-9]\\d{7,9}","\\d{6,10}"] ,[,,"(?:3\\d{2}|[4-79]\\d|8[2-9])\\d{6}","\\d{6,9}",,,"312345678"] -,[,,"1[0-46-9]\\d{7}","\\d{9}",,,"123456789"] +,[,,"1(?:[02-46-9][2-9]|11\\d)\\d{6}","\\d{9,10}",,,"123456789"] ,[,,"1[38]00\\d{6}","\\d{10}",,,"1300123456"] ,[,,"1600\\d{6}","\\d{10}",,,"1600123456"] ,[,,"NA","NA"] @@ -2921,10 +2927,12 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ,[,"(3)(\\d{4})(\\d{4})","$1-$2 $3",["3"] ,"0$1",""] -,[,"([18]\\d)(\\d{3})(\\d{3,4})","$1-$2 $3",["1[0-46-9][1-9]|8"] +,[,"([18]\\d)(\\d{3})(\\d{3,4})","$1-$2 $3",["1[02-46-9][1-9]|8"] ,"0$1",""] ,[,"(1)([36-8]00)(\\d{2})(\\d{4})","$1-$2-$3-$4",["1[36-8]0"] ,"",""] +,[,"(11)(\\d{4})(\\d{4})","$1-$2 $3",["11"] +,"0$1",""] ,[,"(154)(\\d{3})(\\d{4})","$1-$2 $3",["15"] ,"0$1",""] ] @@ -2986,7 +2994,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"NE":[,[,,"[029]\\d{7}","\\d{8}"] ,[,,"2(?:0(?:20|3[1-7]|4[134]|5[14]|6[14578]|7[1-578])|1(?:4[145]|5[14]|6[14-68]|7[169]|88))\\d{4}","\\d{8}",,,"20201234"] -,[,,"9[03467]\\d{6}","\\d{8}",,,"93123456"] +,[,,"9[0134678]\\d{6}","\\d{8}",,,"93123456"] ,[,,"08\\d{6}","\\d{8}",,,"08123456"] ,[,,"09\\d{6}","\\d{8}",,,"09123456"] ,[,,"NA","NA"] @@ -3020,7 +3028,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"NG":[,[,,"[1-69]\\d{5,8}|[78]\\d{5,13}","\\d{5,14}"] ,[,,"[12]\\d{6,7}|9\\d{7}|(?:4[023568]|5[02368]|6[02-469]|7[569]|8[2-9])\\d{6}|(?:4[47]|5[14579]|6[1578]|7[0-357])\\d{5,6}|(?:78|41)\\d{5}","\\d{5,9}",,,"12345678"] -,[,,"(?:70(?:[3-9]\\d|2[1-9])|8(?:0[2-9]|1[23689])\\d)\\d{6}","\\d{10}",,,"8021234567"] +,[,,"(?:70(?:[3-9]\\d|2[1-9])|8(?:0[2-9]|1[0235689])\\d)\\d{6}","\\d{10}",,,"8021234567"] ,[,,"800\\d{7,11}","\\d{10,14}",,,"80017591759"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -3236,7 +3244,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"PG":[,[,,"[1-9]\\d{6,7}","\\d{7,8}"] ,[,,"(?: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"] -,[,,"(?:68|7(?:[126]\\d|3[1-9]))\\d{5}","\\d{7,8}",,,"6812345"] +,[,,"(?:68|7[1236]\\d)\\d{5}","\\d{7,8}",,,"6812345"] ,[,,"180\\d{4}","\\d{7}",,,"1801234"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -3253,7 +3261,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"PH":[,[,,"[2-9]\\d{7,9}|1800\\d{7,9}","\\d{7,13}"] ,[,,"(?:2|3[2-68]|4[2-9]|5[2-6]|6[2-58]|7[24578]|8[2-8])\\d{7}","\\d{7,9}",,,"21234567"] -,[,,"9(?:0[5-9]|1[025-9]|2[0-36-9]|3[0235-9]|4[89]|7[349]|89|9[49])\\d{7}","\\d{10}",,,"9051234567"] +,[,,"9(?:0[5-9]|1[025-9]|2[0-36-9]|3[02-9]|4[236-9]|7[349]|89|9[49])\\d{7}","\\d{10}",,,"9051234567"] ,[,,"1800\\d{7,9}","\\d{11,13}",,,"180012345678"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -3280,7 +3288,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"PK":[,[,,"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)[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\\d|1[2-5]|2[1-3]|3[1-6]|4[2-7]|64)\\d{7}","\\d{10}",,,"3012345678"] +,[,,"3(?:0\\d|1[2-5]|2[1-5]|3[1-6]|4[1-7]|64)\\d{7}","\\d{10}",,,"3012345678"] ,[,,"800\\d{5}","\\d{8}",,,"80012345"] ,[,,"900\\d{5}","\\d{8}",,,"90012345"] ,[,,"NA","NA"] @@ -3399,7 +3407,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"PY":[,[,,"5[0-5]\\d{4,7}|[2-46-9]\\d{5,8}","\\d{5,9}"] ,[,,"(?:[26]1|3[289]|4[124678]|7[123]|8[1236])\\d{5,7}|(?:2(?:2[4568]|7[15]|9[1-5])|3(?:18|3[167]|4[2357]|51)|4(?:18|2[45]|3[12]|5[13]|64|71|9[1-47])|5(?:[1-4]\\d|5[0234])|6(?:3[1-3]|44|7[1-4678])|7(?:17|4[0-4]|6[1-578]|75|8[0-8])|858)\\d{5,6}","\\d{5,9}",,,"212345678"] -,[,,"9(?:61|7[12356]|8[1-5]|9[1235])\\d{6}","\\d{9}",,,"961456789"] +,[,,"9(?:61|7[1-6]|8[1-5]|9[1-5])\\d{6}","\\d{9}",,,"961456789"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -3418,11 +3426,11 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,,[,,"NA","NA"] ,,,[,,"NA","NA"] -,[,,"[2-9]0\\d{4,7}","\\d{5,9}",,,"201234567"] +,[,,"[2-9]0\\d{4,7}","\\d{6,9}",,,"201234567"] ] ,"QA":[,[,,"[3-8]\\d{6,7}","\\d{7,8}"] ,[,,"44\\d{6}","\\d{7,8}",,,"44123456"] -,[,,"(?:33|55|66|77)\\d{6}","\\d{7,8}",,,"33123456"] +,[,,"(?:3[03]|55|66|7[07])\\d{6}","\\d{7,8}",,,"33123456"] ,[,,"800\\d{4}","\\d{7,8}",,,"8001234"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -3531,7 +3539,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,1] ,"SA":[,[,,"[1-9]\\d{7,10}","\\d{7,11}"] ,[,,"(?:1[24-7]|2[24-8]|3[35-8]|4[34-68]|6[2-5]|7[235-7])\\d{6}","\\d{7,8}",,,"12345678"] -,[,,"(?:5[013-69]\\d|8111)\\d{6}","\\d{9,10}",,,"512345678"] +,[,,"(?:5[013-689]\\d|8111)\\d{6}","\\d{9,10}",,,"512345678"] ,[,,"800\\d{7}","\\d{10}",,,"8001234567"] ,[,,"9200\\d{7}","\\d{11}",,,"92001234567"] ,[,,"NA","NA"] @@ -3583,7 +3591,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"SD":[,[,,"[19]\\d{8}","\\d{9}"] ,[,,"1(?:[25]\\d|8[3567])\\d{6}","\\d{9}",,,"121231234"] -,[,,"9[1259]\\d{7}","\\d{9}",,,"911231234"] +,[,,"9[01259]\\d{7}","\\d{9}",,,"911231234"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -3643,7 +3651,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"SG":[,[,,"[36]\\d{7}|[17-9]\\d{7,10}","\\d{8,11}"] ,[,,"6[1-8]\\d{6}","\\d{8}",,,"61234567"] -,[,,"(?:8[1-5]|9[0-8])\\d{6}","\\d{8}",,,"81234567"] +,[,,"(?:8[1-6]|9[0-8])\\d{6}","\\d{8}",,,"81234567"] ,[,,"1?800\\d{7}","\\d{10,11}",,,"18001234567"] ,[,,"1900\\d{7}","\\d{11}",,,"19001234567"] ,[,,"NA","NA"] @@ -3768,7 +3776,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,1] ,"SN":[,[,,"[37]\\d{8}","\\d{9}"] ,[,,"3(?:010|3(?:8[1-9]|9[2-9]))\\d{5}","\\d{9}",,,"301012345"] -,[,,"7(?:0[1256]0|6(?:1[23]|2[89]|3[3489]|4[6-9]|5[1-389]|6[5-9]|7[45]|8[3-8])|7(?:01|1[014-8]|[2-79]\\d|8[019]))\\d{5}","\\d{9}",,,"701012345"] +,[,,"7(?:0[1256]0|6(?:1[23]|2[89]|3[3489]|4[6-9]|5[1-9]|6[3-9]|7[45]|8[3-8])|7(?:01|[12-79]\\d|8[0139]))\\d{5}","\\d{9}",,,"701012345"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -3895,7 +3903,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"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"] +,[,,"(?:6[36]\\d|77\\d|9(?:5[0-4]|9\\d))\\d{5}","\\d{8}",,,"63012345"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -3907,24 +3915,23 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,,,[,,"NA","NA"] ,[,,"NA","NA"] ] -,"TG":[,[,,"[02-9]\\d{6,7}","\\d{7,8}"] -,[,,"2?(?:2[2-7]|3[23]|44|55|66|77)\\d{5}","\\d{7,8}",,,"22212345"] -,[,,"(?:0[1-9]|7[56]|8[1-7]|9\\d)\\d{5}|9[0-289]\\d{6}","\\d{7,8}",,,"90112345"] +,"TG":[,[,,"[29]\\d{7}","\\d{8}"] +,[,,"2(?:2[2-7]|3[23]|44|55|66|77)\\d{5}","\\d{8}",,,"22212345"] +,[,,"9[0-289]\\d{6}","\\d{8}",,,"90112345"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"TG",228,"00",,,,,,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",,"",""] -,[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""] +,"TG",228,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""] ] ,,[,,"NA","NA"] ,,,[,,"NA","NA"] ,[,,"NA","NA"] -,1] -,"TH":[,[,,"[2-8]\\d{7,8}|1\\d{9}","\\d{8,10}"] -,[,,"(?:2[1-9]|3[24-9]|4[2-5]|5[3-6]|7[3-7])\\d{6}","\\d{8}",,,"21234567"] -,[,,"8\\d{8}","\\d{9}",,,"812345678"] +] +,"TH":[,[,,"[2-9]\\d{7,8}|1\\d{9}","\\d{8,10}"] +,[,,"(?:2[1-9]|3[2-9]|4[2-5]|5[2-6]|7[3-7])\\d{6}","\\d{8}",,,"21234567"] +,[,,"[89]\\d{8}","\\d{9}",,,"812345678"] ,[,,"1800\\d{6}","\\d{10}",,,"1800123456"] ,[,,"1900\\d{6}","\\d{10}",,,"1900123456"] ,[,,"NA","NA"] @@ -3934,7 +3941,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ,[,"([3-7]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[3-7]"] ,"0$1",""] -,[,"(8)(\\d{4})(\\d{4})","$1 $2 $3",["8"] +,[,"([89])(\\d{4})(\\d{4})","$1 $2 $3",["[89]"] ,"0$1",""] ,[,"(1[89]00)(\\d{3})(\\d{3})","$1 $2 $3",["1"] ,"$1",""] @@ -4004,15 +4011,15 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,,,[,,"NA","NA"] ,[,,"NA","NA"] ] -,"TN":[,[,,"[247-9]\\d{7}","\\d{8}"] +,"TN":[,[,,"[2457-9]\\d{7}","\\d{8}"] ,[,,"7\\d{7}","\\d{8}",,,"71234567"] -,[,,"(?:[29]\\d|4[01])\\d{6}","\\d{8}",,,"20123456"] +,[,,"(?:[29]\\d|4[01]|5[01258]|)\\d{6}","\\d{8}",,,"20123456"] ,[,,"NA","NA"] ,[,,"8[028]\\d{6}","\\d{8}",,,"80123456"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"TN",216,"00",,,,,,,,[[,"([247-9]\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"",""] +,"TN",216,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",,"",""] ] ,,[,,"NA","NA"] ,,,[,,"NA","NA"] @@ -4058,7 +4065,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"TT":[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"] ,[,,"868(?:2(?:01|2[1-5])|6(?:07|1[4-6]|2[1-9]|[3-6]\\d|7[0-79]|9[0-8])|82[12])\\d{4}","\\d{7}(?:\\d{3})?",,,"8682211234"] -,[,,"868(?:29\\d|3(?:0[1-9]|1[02-9]|[2-9]\\d)|4(?:[679]\\d|8[0-4])|6(?:20|78|8\\d)|7(?:1[02-9]|[2-9]\\d))\\d{4}","\\d{10}",,,"8682911234"] +,[,,"868(?:29\\d|3(?:0[1-9]|1[02-9]|[2-9]\\d)|4(?:[679]\\d|8[0-4])|6(?:20|78|8\\d)|7(?:03|1[02-9]|[2-9]\\d))\\d{4}","\\d{10}",,,"8682911234"] ,[,,"8(?:00|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002345678"] ,[,,"900[2-9]\\d{6}","\\d{10}",,,"9002345678"] ,[,,"NA","NA"] @@ -4137,7 +4144,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"UG":[,[,,"\\d{9}","\\d{5,9}"] ,[,,"3\\d{8}|4(?:[1-6]\\d|7[136]|8[1356]|96)\\d{6}|20(?:0\\d|24)\\d{5}","\\d{5,9}",,,"312345678"] -,[,,"7(?:[15789]\\d|0[0-4])\\d{6}","\\d{9}",,,"712345678"] +,[,,"7(?:[15789]\\d|0[0-7])\\d{6}","\\d{9}",,,"712345678"] ,[,,"800[123]\\d{5}","\\d{9}",,,"800123456"] ,[,,"90[123]\\d{6}","\\d{9}",,,"901123456"] ,[,,"NA","NA"] @@ -4345,7 +4352,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"YE":[,[,,"[1-7]\\d{6,8}","\\d{6,9}"] ,[,,"(?:1(?:7\\d|[2-68])|2[2-68]|3[2358]|4[2-58]|5[2-6]|6[3-58]|7[24-68])\\d{5}","\\d{6,8}",,,"1234567"] -,[,,"7[137]\\d{7}","\\d{9}",,,"712345678"] +,[,,"7[0137]\\d{7}","\\d{9}",,,"712345678"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -4353,7 +4360,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,"YE",967,"00","0",,,"0",,,,[[,"([1-7])(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-6]|7[24-68]"] ,"0$1",""] -,[,"(7[137]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["7[137]"] +,[,"(7\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["7[0137]"] ,"0$1",""] ] ,,[,,"NA","NA"] @@ -4372,9 +4379,9 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,,"269|63",[,,"NA","NA"] ,[,,"NA","NA"] ] -,"ZA":[,[,,"[1-578]\\d{8}","\\d{8,9}"] +,"ZA":[,[,,"[1-5]\\d{8}|(?:7\\d{4,8}|8[1-5789]\\d{3,7})|8[06]\\d{7}","\\d{5,9}"] ,[,,"(?:1[0-8]|2[1-478]|3[1-69]|4\\d|5[1346-8])\\d{7}","\\d{8,9}",,,"101234567"] -,[,,"(?:7[1-4689]|8[1-5789])\\d{7}","\\d{9}",,,"711234567"] +,[,,"(?:7[1-4689]|8[1-5789])\\d{3,7}","\\d{5,9}",,,"711234567"] ,[,,"80\\d{7}","\\d{9}",,,"801234567"] ,[,,"86[1-9]\\d{6}","\\d{9}",,,"861234567"] ,[,,"860\\d{6}","\\d{9}",,,"860123456"] @@ -4384,6 +4391,10 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ,[,"([1-578]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[1-57]|8(?:[0-57-9]|6[1-9])"] ,"0$1",""] +,[,"(\\d{2})(\\d{3,4})","$1 $2",["7|8[1-5789]"] +,"0$1",""] +,[,"(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3",["7|8[1-5789]"] +,"0$1",""] ] ,,[,,"NA","NA"] ,,,[,,"NA","NA"] @@ -4391,7 +4402,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"ZM":[,[,,"[289]\\d{8}","\\d{9}"] ,[,,"21[1-8]\\d{6}","\\d{9}",,,"211234567"] -,[,,"9(?:55|6[3-9]|7[4-9])\\d{6}","\\d{9}",,,"955123456"] +,[,,"9(?:5[05]|6[1-9]|7[13-9])\\d{6}","\\d{9}",,,"955123456"] ,[,,"800\\d{6}","\\d{9}",,,"800123456"] ,[,,"NA","NA"] ,[,,"NA","NA"] diff --git a/javascript/i18n/phonenumbers/metadatafortesting.js b/javascript/i18n/phonenumbers/metadatafortesting.js index 6b77a1ec3..5c12c7f4e 100644 --- a/javascript/i18n/phonenumbers/metadatafortesting.js +++ b/javascript/i18n/phonenumbers/metadatafortesting.js @@ -234,7 +234,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,,,[,,"NA","NA"] ,[,,"NA","NA"] ] -,"KR":[,[,,"[1-79]\\d{3,9}|8\\d{8}","\\d{4,10}"] +,"KR":[,[,,"[1-7]\\d{3,9}|8\\d{8}","\\d{4,10}"] ,[,,"(?:2|[34][1-3]|5[1-5]|6[1-4])(?:1\\d{2,3}|[2-9]\\d{6,7})","\\d{4,10}",,,"22123456"] ,[,,"1[0-25-9]\\d{7,8}","\\d{9,10}",,,"1023456789"] ,[,,"80\\d{7}","\\d{9}",,,"801234567"] @@ -244,7 +244,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"70\\d{8}","\\d{10}",,,"7012345678"] ,"KR",82,"00(?:[124-68]|[37]\\d{2})","0",,,"0(8[1-46-8]|85\\d{2})?",,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["1(?:0|1[19]|[69]9|5[458])|[57]0","1(?:0|1[19]|[69]9|5(?:44|59|8))|[57]0"] ,"0$1",""] -,[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1(?:[169][2-8]|[78]|5[1-4])|[68]0|[3-9][1-9][2-9]","1(?:[169][2-8]|[78]|5(?:[1-3]|4[56]))|[68]0|[3-9][1-9][2-9]"] +,[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1(?:[169][2-8]|[78]|5[1-4])|[68]0|[3-6][1-9][2-9]","1(?:[169][2-8]|[78]|5(?:[1-3]|4[56]))|[68]0|[3-6][1-9][2-9]"] ,"0$1",""] ,[,"(\\d{3})(\\d)(\\d{4})","$1-$2-$3",["131","1312"] ,"0$1",""] @@ -262,9 +262,9 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ,[,"(\\d)(\\d{4})","$1-$2",["21[36]","21(?:3[035-9]|6[03-578])"] ,"0$1",""] -,[,"(\\d{2})(\\d{3})","$1-$2",["[3-9][1-9]1","[3-9][1-9]1(?:[0-46-9])","[3-9][1-9]1(?:[0-247-9]|3[124]|6[1269])"] +,[,"(\\d{2})(\\d{3})","$1-$2",["[3-6][1-9]1","[3-6][1-9]1(?:[0-46-9])","[3-6][1-9]1(?:[0-247-9]|3[124]|6[1269])"] ,"0$1",""] -,[,"(\\d{2})(\\d{4})","$1-$2",["[3-9][1-9]1","[3-9][1-9]1[36]","[3-9][1-9]1(?:3[035-9]|6[03-578])"] +,[,"(\\d{2})(\\d{4})","$1-$2",["[3-6][1-9]1","[3-6][1-9]1[36]","[3-6][1-9]1(?:3[035-9]|6[03-578])"] ,"0$1",""] ] ,,[,,"NA","NA"] @@ -360,7 +360,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"SG",65,"0[0-3][0-9]",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[369]|8[1-9]"] +,"SG",65,"0[0-3][0-9]",,,,"777777",,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[369]|8[1-9]"] ,"",""] ,[,"(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1[89]"] ,"",""] diff --git a/javascript/i18n/phonenumbers/metadatalite.js b/javascript/i18n/phonenumbers/metadatalite.js index a0224c696..29037b8df 100644 --- a/javascript/i18n/phonenumbers/metadatalite.js +++ b/javascript/i18n/phonenumbers/metadatalite.js @@ -354,7 +354,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"AM":[,[,,"[1-35-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}"] -,[,,"(?:55|77|9[1-46-9])\\d{6}","\\d{8}"] +,[,,"(?:55|77|9[1-9])\\d{6}","\\d{8}"] ,[,,"800\\d{5}","\\d{8}"] ,[,,"90[016]\\d{5}","\\d{8}"] ,[,,"80[1-4]\\d{5}","\\d{8}"] @@ -606,13 +606,13 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"BE":[,[,,"[1-9]\\d{7,8}","\\d{8,9}"] ,[,,"(?:1[0-69]|[23][2-8]|[49][23]|5\\d|6[013-57-9]|7[18])\\d{6}|8(?:0[1-9]|[1-69]\\d)\\d{5}","\\d{8}"] -,[,,"4(?:7\\d|8[3-9]|9[1-9])\\d{6}","\\d{9}"] +,[,,"4(?:[67]\\d|8[3-9]|9[1-9])\\d{6}","\\d{9}"] ,[,,"800\\d{5}","\\d{8}"] ,[,,"(?:90|7[07])\\d{6}","\\d{8}"] ,[,,"87\\d{6}","\\d{8}"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"BE",32,"00","0",,,"0",,,,[[,"(4[7-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["4[7-9]"] +,"BE",32,"00","0",,,"0",,,,[[,"(4[6-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["4[6-9]"] ,"0$1",""] ,[,"([2-49])(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[23]|[49][23]"] ,"0$1",""] @@ -668,7 +668,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"BH":[,[,,"[136-9]\\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(?:[23469]\\d|77|8[38])|6(?:1[16]|6[03469]|9[69])|77\\d)\\d{5}","\\d{8}"] +,[,,"(?:3(?:[23469]\\d|77|8[348])|6(?:1[16]|6[03469]|9[69])|77\\d)\\d{5}","\\d{8}"] ,[,,"80\\d{6}","\\d{8}"] ,[,,"(?:87|9[014578])\\d{6}","\\d{8}"] ,[,,"84\\d{6}","\\d{8}"] @@ -696,7 +696,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"BJ":[,[,,"[2689]\\d{7}|7\\d{3}","\\d{4,8}"] ,[,,"2(?:02|1[037]|2[45]|3[68])\\d{5}","\\d{8}"] -,[,,"66\\d{6}|9(?:0[069]|[35][0-2457-9]|[6-8]\\d)\\d{5}","\\d{8}"] +,[,,"(?:6[46]|9[03-8])\\d{6}","\\d{8}"] ,[,,"7[3-5]\\d{2}","\\d{4}"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -764,8 +764,8 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ] ,"BR":[,[,,"[1-9]\\d{7,9}","\\d{8,10}"] -,[,,"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-5]\\d{7}","\\d{8,10}"] -,[,,"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[6-9]\\d{7}","\\d{10}"] +,[,,"1[1-9][2-5]\\d{7}|(?:[4689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-5]\\d{7}","\\d{8,10}"] +,[,,"1(?:1(?:[6-9]\\d|5[347])|[2-9][6-9]\\d)\\d{6}|(?:[4689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[6-9]\\d{7}","\\d{10}"] ,[,,"800\\d{6,7}","\\d{8,10}"] ,[,,"[359]00\\d{6,7}","\\d{8,10}"] ,[,,"(?:400\\d|3003)\\d{4}","\\d{8,10}"] @@ -794,17 +794,17 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,,"242",[,,"NA","NA"] ,[,,"NA","NA"] ] -,"BT":[,[,,"(?:17|[2-8])\\d{6}","\\d{6,8}"] +,"BT":[,[,,"[1-8]\\d{6,7}","\\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}"] +,[,,"[17]7\\d{6}","\\d{8}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"BT",975,"00",,,,,,,,[[,"(17)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1"] +,"BT",975,"00",,,,,,,,[[,"([17]7)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1|77"] ,"",""] -,[,"([2-8])(\\d{3})(\\d{3})","$1 $2 $3",["[2-8]"] +,[,"([2-8])(\\d{3})(\\d{3})","$1 $2 $3",["[2-68]|7[246]"] ,"",""] ] ,,[,,"NA","NA"] @@ -851,7 +851,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"BZ":[,[,,"[2-8]\\d{6}|0\\d{10}","\\d{7}(?:\\d{4})?"] ,[,,"[234578][02]\\d{5}","\\d{7}"] -,[,,"6(?:[0-2]\\d|[67][01])\\d{4}","\\d{7}"] +,[,,"6(?:[0-3]\\d|[67][01])\\d{4}","\\d{7}"] ,[,,"0800\\d{7}","\\d{11}"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -955,9 +955,9 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,,,[,,"NA","NA"] ,[,,"NA","NA"] ] -,"CI":[,[,,"[02-5]\\d{7}","\\d{8}"] +,"CI":[,[,,"[02-6]\\d{7}","\\d{8}"] ,[,,"(?:2(?:0[023]|1[02357]|[23][045]|4[03-5])|3(?:0[06]|1[069]|[2-4][07]|5[09]|6[08]))\\d{5}","\\d{8}"] -,[,,"(?:0[1-9]|4[04-9]|5[07]|6[067])\\d{6}","\\d{8}"] +,[,,"(?:0[1-9]|4[04-9]|5[07]|6[0567])\\d{6}","\\d{8}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -987,8 +987,8 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"(?:2|32|41)\\d{7}|(?:3[3-5]|4[235]|5[1-3578]|6[13-57]|7[1-35])\\d{6,7}","\\d{6,9}"] ,[,,"9[6-9]\\d{7}","\\d{8,9}"] ,[,,"800\\d{6}|1230\\d{7}","\\d{9,11}"] -,[,,"600\\d{7,8}","\\d{10,11}"] ,[,,"NA","NA"] +,[,,"600\\d{7,8}","\\d{10,11}"] ,[,,"NA","NA"] ,[,,"44\\d{7}","\\d{9}"] ,"CL",56,"(?:0|1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))0","0",,,"0|(1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3",["2"] @@ -1007,7 +1007,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"$1",""] ] ,,[,,"NA","NA"] -,,,[,,"NA","NA"] +,,,[,,"600\\d{7,8}","\\d{10,11}"] ,[,,"NA","NA"] ] ,"CM":[,[,,"[237-9]\\d{7}","\\d{8}"] @@ -1028,7 +1028,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ] ,"CN":[,[,,"[1-79]\\d{7,11}|8[0-357-9]\\d{6,9}","\\d{4,12}"] -,[,,"21\\d{8,10}|(?:10|2[02-57-9]|3(?:11|7[179])|4(?:[15]1|3[12])|5(?:1\\d|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09]|91)|898)\\d{8}|(?:3(?:1[02-9]|35|49|5\\d|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|3[3-9]|5[2-9]|6[4789]|7\\d|8[23])|5(?:3[03-9]|4[36]|5\\d|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))\\d{7}|80(?:29|6[03578]|7[018]|81)\\d{4}","\\d{4,12}"] +,[,,"21\\d{8,10}|(?:10|2[02-57-9]|3(?:11|7[179])|4(?:[15]1|3[12])|5(?:1\\d|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09]|91)|898)\\d{8}|(?:3(?:1[02-9]|35|49|5\\d|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|3[3-9]|5[2-9]|6[4789]|7\\d|8[23])|5(?:3[03-9]|4[36]|5\\d|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[157]\\d|2[248]|3[04-9]|4[3-6]|6[2368]|9[02-9])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))\\d{7}|80(?:29|6[03578]|7[018]|81)\\d{4}","\\d{4,12}"] ,[,,"1(?:3\\d|4[57]|5[0-35-9]|8[025-9])\\d{8}","\\d{11}"] ,[,,"(?:10)?800\\d{7}","\\d{10,12}"] ,[,,"16[08]\\d{5}","\\d{8}"] @@ -1233,14 +1233,14 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ] ,"DK":[,[,,"[1-9]\\d{7}","\\d{8}"] -,[,,"(?:3[2-9]|4[3-9]|5[4-9]|6[2-9]|7[02-9]|8[26-9]|9[6-9])\\d{6}","\\d{8}"] -,[,,"(?:2[0-9]|3[0-2]|4[0-2]|5[0-3]|6[01]|7[12]|81|99)\\d{6}","\\d{8}"] +,[,,"(?:[2-7]\\d|8[126-9]|9[6-9])\\d{6}","\\d{8}"] +,[,,"(?:[2-7]\\d|8[126-9]|9[6-9])\\d{6}","\\d{8}"] ,[,,"80\\d{6}","\\d{8}"] ,[,,"90\\d{6}","\\d{8}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"DK",45,"00",,,,,,,,[[,"([1-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""] +,"DK",45,"00",,,,,,,1,[[,"([1-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""] ] ,,[,,"NA","NA"] ,,,[,,"NA","NA"] @@ -1248,7 +1248,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"DM":[,[,,"[57-9]\\d{9}","\\d{7}(?:\\d{3})?"] ,[,,"767(?:2(?:55|66)|4(?:2[01]|4[0-25-9])|50[0-4])\\d{4}","\\d{7}(?:\\d{3})?"] -,[,,"767(?:2(?:[2346]5|7[5-7])|31[5-7]|61[4-7])\\d{4}","\\d{10}"] +,[,,"767(?:2(?:[234689]5|7[5-7])|31[5-7]|61[2-7])\\d{4}","\\d{10}"] ,[,,"8(?:00|55|66|77|88)[2-9]\\d{6}","\\d{10}"] ,[,,"900[2-9]\\d{6}","\\d{10}"] ,[,,"NA","NA"] @@ -1272,7 +1272,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"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}"] +,[,,"(?:5[56]|6[569]|7[7-9])\\d{7}","\\d{9}"] ,[,,"800\\d{6}","\\d{9}"] ,[,,"80[3-689]1\\d{5}","\\d{9}"] ,[,,"80[12]1\\d{5}","\\d{9}"] @@ -1291,22 +1291,22 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"EC":[,[,,"[2-9]\\d{7}|1\\d{9,10}","\\d{7,11}"] ,[,,"[2-7][2-7]\\d{6}","\\d{7,8}"] -,[,,"[89]\\d{7}","\\d{8}"] +,[,,"(?:69|[89]\\d)\\d{6}","\\d{8}"] ,[,,"1800\\d{6,7}","\\d{10,11}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"EC",593,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{4})","$1 $2-$3",["[2-7]"] +,"EC",593,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{4})","$1 $2-$3",["[2-57]|6[2-7]"] ,"(0$1)",""] -,[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[89]"] +,[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["69|[89]"] ,"0$1",""] ,[,"(1800)(\\d{3})(\\d{3,4})","$1 $2 $3",["1"] ,"$1",""] ] -,[[,"(\\d)(\\d{3})(\\d{4})","$1-$2-$3",["[2-7]"] +,[[,"(\\d)(\\d{3})(\\d{4})","$1-$2-$3",["[2-57]|6[2-7]"] ] -,[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[89]"] +,[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["69|[89]"] ] ,[,"(1800)(\\d{3})(\\d{3,4})","$1 $2 $3",["1"] ] @@ -1338,7 +1338,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"EG":[,[,,"1\\d{4,9}|[2456]\\d{8}|3\\d{7}|[89]\\d{8,9}","\\d{5,10}"] ,[,,"(?:1[35][23]|2[23]\\d|3\\d|4(?:0[2-4]|[578][23]|64)|5(?:0[234]|[57][23])|6[24-689]3|8(?:[28][2-4]|42|6[23])|9(?:[25]2|3[24]|6[23]|7[2-4]))\\d{6}|1[69]\\d{3}","\\d{5,9}"] -,[,,"1[0-246-9]\\d{7}","\\d{9}"] +,[,,"1(?:[0-246-9]|5[0-2])\\d{7}","\\d{9,10}"] ,[,,"800\\d{7}","\\d{10}"] ,[,,"900\\d{7}","\\d{10}"] ,[,,"NA","NA"] @@ -1346,9 +1346,11 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,"EG",20,"00","0",,,"0",,,,[[,"(\\d)(\\d{7,8})","$1 $2",["[23]"] ,"0$1",""] -,[,"(\\d{2})(\\d{7})","$1 $2",["[14-6]|[89][2-9]"] +,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["15[0-2]|[89]00"] +,"0$1",""] +,[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["1(?:[0-246-9]|5[3-9])"] ,"0$1",""] -,[,"([89]00)(\\d{3})(\\d{4})","$1 $2 $3",["[89]00"] +,[,"(\\d{2})(\\d{7})","$1 $2",["13|[4-6]|[89][2-9]"] ,"0$1",""] ] ,,[,,"NA","NA"] @@ -1418,7 +1420,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"FJ":[,[,,"[36-9]\\d{6}|0\\d{10}","\\d{7}(?:\\d{4})?"] ,[,,"(?:3[0-5]|6[25-7]|8[58])\\d{5}","\\d{7}"] -,[,,"(?:7[0-4]|9[27-9])\\d{5}","\\d{7}"] +,[,,"(?:7[0-467]|8[367]|9[02346-9])\\d{5}","\\d{7}"] ,[,,"0800\\d{7}","\\d{11}"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -1695,7 +1697,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ] ,"GR":[,[,,"[26-9]\\d{9}","\\d{10}"] -,[,,"2(?:1\\d{2}|2(?:3[1-8]|4[1-7]|5[1-4]|6[1-8]|7[1-5]|[289][1-9])|3(?:1\\d|2[1-5]|3[1-4]|[45][1-3]|7[1-7]|8[1-6]|9[1-79])|4(?:1\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\d|2[1-3]|4[124]|5[1-6]|[39][1-4])|6(?:1\\d|3[24]|4[1-7]|5[13-9]|[269][1-6]|7[14]|8[1-35])|7(?:1\\d|[23][1-5]|4[1-7]|5[1-57]|6[134]|9[15-7])|8(?:1\\d|2[1-5]|[34][1-4]|9[1-7]))\\d{6}","\\d{10}"] +,[,,"2(?:1\\d{2}|2(?:3[1-8]|4[1-7]|5[1-4]|6[1-8]|7[1-5]|[289][1-9])|3(?:1\\d|2[1-5]|3[1-4]|[45][1-3]|7[1-7]|8[1-6]|9[1-79])|4(?:1\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\d|2[1-3]|4[124]|5[1-6]|[39][1-4])|6(?:1\\d|3[24]|4[1-7]|5[13-9]|[269][1-6]|7[14]|8[1-35])|7(?:1\\d|2[1-5]|3[1-6]|4[1-7]|5[1-57]|6[134]|9[15-7])|8(?:1\\d|2[1-5]|[34][1-4]|9[1-7]))\\d{6}","\\d{10}"] ,[,,"69\\d{8}","\\d{10}"] ,[,,"800\\d{7}","\\d{10}"] ,[,,"90[19]\\d{7}","\\d{10}"] @@ -1805,7 +1807,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"HR":[,[,,"[1-7]\\d{5,8}|[89]\\d{6,11}","\\d{6,12}"] ,[,,"(?:1|6[029])\\d{7}|(?:2[0-3]|3[1-5]|4[02-47-9]|5[1-3])\\d{6}","\\d{6,9}"] -,[,,"9[12589]\\d{6,10}","\\d{8,12}"] +,[,,"9[1257-9]\\d{6,10}","\\d{8,12}"] ,[,,"80[01]\\d{4,7}","\\d{7,10}"] ,[,,"6[145]\\d{4,7}","\\d{6,9}"] ,[,,"NA","NA"] @@ -1817,9 +1819,11 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ,[,"([2-5]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[2-5]"] ,"0$1",""] -,[,"(9[12589])(\\d{3,4})(\\d{3,4})","$1 $2 $3",["9"] +,[,"(9\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["9"] ,"0$1",""] -,[,"(9[12589])(\\d{3,4})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"] +,[,"(9\\d)(\\d{4})(\\d{4})","$1 $2 $3",["9"] +,"0$1",""] +,[,"(9\\d)(\\d{3,4})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"] ,"0$1",""] ,[,"(\\d{2})(\\d{2})(\\d{2,3})","$1 $2 $3",["6[145]|7"] ,"0$1",""] @@ -1836,7 +1840,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"HT":[,[,,"[2-489]\\d{7}","\\d{8}"] ,[,,"2(?:[24]\\d|5[1-5]|94)\\d{5}","\\d{8}"] -,[,,"(?:3[2-9]|4\\d)\\d{6}","\\d{8}"] +,[,,"(?:3[1-9]|4\\d)\\d{6}","\\d{8}"] ,[,,"8\\d{7}","\\d{8}"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -1962,13 +1966,13 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"IN":[,[,,"1\\d{7,11}|[2-9]\\d{9,10}","\\d{6,12}"] ,[,,"(?:11|2[02]|33|4[04]|79)[2-6]\\d{7}|80[2-46]\\d{7}|(?:1(?:2[0-249]|3[0-25]|4[145]|[59][14]|6[014]|7[1257]|8[01346])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[126-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:[136][25]|22|4[28]|5[12]|[78]1|9[15])|6(?:12|[2345]1|57|6[13]|7[14]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91))[2-6]\\d{6}|(?:(?:1(?:2[35-8]|3[346-9]|4[236-9]|[59][0235-9]|6[235-9]|7[34689]|8[257-9])|2(?:1[134689]|3[24-8]|4[2-8]|5[25689]|6[2-4679]|7[13-79]|8[2-479]|9[235-9])|3(?:01|1[79]|2[1-5]|4[25-8]|5[125689]|6[235-7]|7[157-9]|8[2-467])|4(?:1[14578]|2[5689]|3[2-467]|5[4-7]|6[35]|73|8[2689]|9[2389])|5(?:[16][146-9]|2[14-8]|3[1346]|4[14-69]|5[46]|7[2-4]|8[2-8]|9[246])|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24-58]|7[23-689]|8[1-6])|8(?:1[1357-9]|2[235-8]|3[03-57-9]|4[0-24-9]|5\\d|6[2457-9]|7[1-6]|8[1256]|9[2-4]))\\d|7(?:(?:1[013-9]|2[0235-9]|3[2679]|4[1-35689]|5[2-46-9]|[67][02-9]|9\\d)\\d|8(?:2[0-6]|[013-8]\\d)))[2-6]\\d{5}","\\d{6,10}"] -,[,,"(?:7(?:2(?:0[04-9]|5[09]|7[5-8]|9[389])|3(?:0[134679]|5[0-489]|7[3679]|8[3-9]|9[689])|4(?:0[4579]|1[15-9]|[29][89]|39|8[389])|5(?:0[0-5789]|[47]9|[25]0|6[6-9]|[89][7-9])|6(?:0[027]|12|20|3[19]|5[45]|6[5-9]|7[679]|9[6-9])|7(?:0[27-9]|[39][5-9]|42|60)|8(?:[03][07-9]|14|2[7-9]|4[25]|6[09]|7\\d|9[013-9]))|8(?:0[01589]\\d|1(?:[024]\\d|15|30|7[19]|97)|2(?:[2369]\\d|52|7[0135]|8[67])|3(?:0[235-8]|4[179]|74|90)|4(?:[02-58]\\d|10|6[09])|5(?:0[079]|[19]1|2\\d|30|4[47]|53|7[45])|6(?:[0589]\\d|7[09])|7(?:1[24]|[2569]\\d)|8(?:[07-9]\\d|17|2[024-8]|44|5[389]|6[0167])|9(?:[057-9]\\d|2[35-9]|3[09]|4[038]|6[0-27-9]))|9\\d{3})\\d{6}","\\d{10}"] +,[,,"(?:7(?:2(?:0[04-9]|5[09]|7[5-8]|9[389])|3(?:0[13-9]|5[0-4789]|7[3679]|8[1-9]|9[689])|4(?:0[245789]|1[15-9]|[29][89]|39|8[389])|5(?:0[0-5789]|[47]9|[25]0|6[6-9]|[89][7-9])|6(?:0[027]|12|20|3[19]|5[45]|6[5-9]|7[679]|9[6-9])|7(?:0[27-9]|[39][5-9]|42|60)|8(?:[03][07-9]|14|2[7-9]|4[25]|6[09]|7\\d|9[013-9]))|8(?:0(?:[01589]\\d|66)|1(?:[024]\\d|1[56]|30|7[19]|97)|2(?:[2369]\\d|52|7[01357]|8[567])|3(?:0[235-8]|4[14789]|74|90)|4(?:[02-58]\\d|10|6[09])|5(?:0[079]|11|2\\d|30|4[47]|53|7[45]|9[015])|6(?:[0589]\\d|7[09])|7(?:1[24]|[2569]\\d)|8(?:[07-9]\\d|17|2[024-8]|44|5[389]|6[0167])|9(?:[057-9]\\d|2[35-9]|3[09]|4[036-8]|6[0-46-9]))|9\\d{3})\\d{6}","\\d{10}"] ,[,,"1(?:600\\d{6}|800\\d{4,8})","\\d{8,12}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"IN",91,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{2})(\\d{6})","$1 $2 $3",["7(?:2[0579]|3[057-9]|4[0-389]|5[024-9]|6[0-35-9]|7[03469]|8[0-4679])|8(?:0[01589]|1[0-479]|2[236-9]|3[0479]|4[0-68]|5[0-579]6[05789]7[12569]|8[0124-9]|9[02-9])|9","7(?:2(?:0[04-9]|5[09]|7[5-8]|9[389])|3(?:0[134679]|5[0-489]|7[3679]|8[3-9]|9[689])|4(?:0[4579]|1[15-9]|[29][89]|39|8[389])|5(?:0[0-5789]|[47]9|[25]0|6[6-9]|[89][7-9])|6(?:0[027]|12|20|3[19]|5[45]|6[5-9]|7[679]|9[6-9])|7(?:0[27-9]|3[5-9]|42|60|9[5-9])|8(?:[03][07-9]|14|2[7-9]|4[25]|6[09]|7|9[013-9]))|8(?:0[01589]|1(?:[024]|15|30|7[19]|97)|2(?:[2369]|7[0135]|8[67])|3(?:0[235-8]|4[179]|74|90)|4(?:[02-58]|10|6[09])|5(?:0[079]|[19]1|2|30|4[47]|53|7[45])|6(?:[0589]|70)|7(?:1[24]|[2569])|8(?:[07-9]|17|2[024-8]|44|5[389]|6[0167])|9(?:[057-9]|2[35-9]|3[09]|4[038]|6[0-27-9]))|9"] +,"IN",91,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{2})(\\d{6})","$1 $2 $3",["7(?:2[0579]|3[057-9]|4[0-389]|5[024-9]|6[0-35-9]|7[03469]|8[0-4679])|8(?:0[01589]|1[0-479]|2[236-9]|3[0479]|4[0-68]|5[0-579]6[05789]7[12569]|8[0124-9]|9[02-9])|9","7(?:2(?:0[04-9]|5[09]|7[5-8]|9[389])|3(?:0[13-9]|5[0-4789]|7[3679]|8[1-9]|9[689])|4(?:0[245789]|1[15-9]|[29][89]|39|8[389])|5(?:0[0-5789]|[47]9|[25]0|6[6-9]|[89][7-9])|6(?:0[027]|12|20|3[19]|5[45]|6[5-9]|7[679]|9[6-9])|7(?:0[27-9]|3[5-9]|42|60|9[5-9])|8(?:[03][07-9]|14|2[7-9]|4[25]|6[09]|7|9[013-9]))|8(?:0[01589]|1(?:[024]|1[56]|30|7[19]|97)|2(?:[2369]|7[01357]|8[567])|3(?:0[235-8]|4[14789]|74|90)|4(?:[02-58]|10|6[09])|5(?:0[079]|11|2|30|4[47]|53|7[45]|9[015])|6(?:[0589]|70)|7(?:1[24]|[2569])|8(?:[07-9]|17|2[024-8]|44|5[389]|6[0167])|9(?:[057-9]|2[35-9]|3[09]|4[03678]|6[0-46-9]))|9"] ,"0$1",""] ,[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["11|2[02]|33|4[04]|79|80[2-46]"] ,"0$1",""] @@ -2007,7 +2011,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"IQ":[,[,,"[1-7]\\d{7,9}","\\d{6,10}"] ,[,,"1\\d{7}|(?:2[13-5]|3[02367]|4[023]|5[03]|6[026])\\d{6,7}","\\d{6,9}"] -,[,,"7[5-9]\\d{8}","\\d{10}"] +,[,,"7[3-9]\\d{8}","\\d{10}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -2017,7 +2021,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ,[,"([2-6]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-6]"] ,"0$1",""] -,[,"(7[5-9]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["7"] +,[,"(7\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"] ,"0$1",""] ] ,,[,,"NA","NA"] @@ -2043,7 +2047,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"IS":[,[,,"[4-9]\\d{6}|38\\d{7}","\\d{7,9}"] ,[,,"(?: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}"] -,[,,"38[59]\\d{6}|(?: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,9}"] +,[,,"38[59]\\d{6}|(?:6(?:1[0-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,9}"] ,[,,"800\\d{4}","\\d{7}"] ,[,,"90\\d{5}","\\d{7}"] ,[,,"NA","NA"] @@ -2103,7 +2107,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"JM":[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"] ,[,,"876(?:5(?:0[12]|1[0-468]|2[35]|63)|6(?:0[1-3579]|1[027]|2[3-5]|34|[45]0|63|7[05]|8[04]|9[4-9])7(?:0[2-689]|[1-6]\\d|8[056]|9[45])|9(?:0[1-8]|1[02378]|[2-8]\\d|9[2-468]))\\d{4}","\\d{7}(?:\\d{3})?"] -,[,,"876(?:(?:2[178]|[348]\\d|)\\d|5(?:27|66|[78]\\d)|7(?:0[07]|7\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579]))\\d{4}","\\d{10}"] +,[,,"876(?:2(?:[178]\\d|99)|[348]\\d{2}|5(?:08|27|66|[78]\\d)|7(?:0[07]|7\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579]))\\d{4}","\\d{10}"] ,[,,"8(?:00|55|66|77|88)[2-9]\\d{6}","\\d{10}"] ,[,,"900[2-9]\\d{6}","\\d{10}"] ,[,,"NA","NA"] @@ -2169,7 +2173,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,1] ,"KE":[,[,,"\\d{6,10}","\\d{4,10}"] ,[,,"(?:20|4[0-6]|5\\d|6[0-24-9])\\d{4,7}","\\d{4,9}"] -,[,,"7(?:0[0-3]|[123]\\d|5[0-3]|7[0-4])\\d{6}","\\d{9}"] +,[,,"7(?:0[0-5]|[123]\\d|5[0-3]|7[0-5])\\d{6}","\\d{9}"] ,[,,"8(?:00|88)\\d{6,7}","\\d{9,10}"] ,[,,"9(?:00|1)\\d{6,7}","\\d{8,10}"] ,[,,"NA","NA"] @@ -2186,7 +2190,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"KG":[,[,,"[356-8]\\d{8,9}","\\d{5,10}"] ,[,,"(?:3(?:1(?:2\\d|3[1-9]|47|5[02]|6[1-8])|2(?:22|3[0-479]|6[0-7])|4(?:22|5[6-9]|6[0-4])|5(?:22|3[4-7]|59|6[0-5])|6(?:22|5[35-7]|6[0-3])|7(?:22|3[468]|4[1-9]|59|6\\d|7[5-7])|9(?:22|4[1-8]|6[0-8]))|6(?:09|12|2[2-4])\\d)\\d{5}","\\d{5,10}"] -,[,,"5[124-7]\\d{7}|7(?:0[05]|7\\d)\\d{6}","\\d{9}"] +,[,,"5[124-7]\\d{7}|7(?:0[0-357-9]|7\\d)\\d{6}","\\d{9}"] ,[,,"800\\d{6,7}","\\d{9,10}"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -2205,7 +2209,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"KH":[,[,,"[1-9]\\d{7,9}","\\d{6,10}"] ,[,,"(?:2[3-6]|3[2-6]|4[2-4]|[567][2-5])[2-46-9]\\d{5}","\\d{6,8}"] -,[,,"(?:(?:1[0-35-9]|6[6-9]|7[06-89]|9\\d)[1-9]|8(?:0[89]|5[2-689]|8\\d{2}|[1349]\\d|))\\d{5}","\\d{8,9}"] +,[,,"(?:(?:1[0-35-9]|6[6-9]|7[06-89]|9\\d)[1-9]|8(?:0[89]|5[2-689]|8\\d{2}|[13469]\\d|))\\d{5}","\\d{8,9}"] ,[,,"1800(?:1\\d|2[019])\\d{4}","\\d{10}"] ,[,,"1900(?:1\\d|2[09])\\d{4}","\\d{10}"] ,[,,"NA","NA"] @@ -2279,7 +2283,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,,,[,,"2(?:[0-24-9]\\d{2}|3(?:[0-79]\\d|8[02-9]))\\d{4}","\\d{8}"] ,[,,"NA","NA"] ] -,"KR":[,[,,"[1-79]\\d{3,9}|8\\d{8}","\\d{4,10}"] +,"KR":[,[,,"[1-7]\\d{3,9}|8\\d{8}","\\d{4,10}"] ,[,,"(?:2|[34][1-3]|5[1-5]|6[1-4])(?:1\\d{2,3}|[2-9]\\d{6,7})","\\d{4,10}"] ,[,,"1[0-25-9]\\d{7,8}","\\d{9,10}"] ,[,,"80\\d{7}","\\d{9}"] @@ -2289,7 +2293,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"70\\d{8}","\\d{10}"] ,"KR",82,"00(?:[124-68]|[37]\\d{2})","0",,,"0(8[1-46-8]|85\\d{2})?",,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["1(?:0|1[19]|[69]9|5[458])|[57]0","1(?:0|1[19]|[69]9|5(?:44|59|8))|[57]0"] ,"0$1","0$CC-$1"] -,[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1(?:[169][2-8]|[78]|5[1-4])|[68]0|[3-9][1-9][2-9]","1(?:[169][2-8]|[78]|5(?:[1-3]|4[56]))|[68]0|[3-9][1-9][2-9]"] +,[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1(?:[169][2-8]|[78]|5[1-4])|[68]0|[3-6][1-9][2-9]","1(?:[169][2-8]|[78]|5(?:[1-3]|4[56]))|[68]0|[3-6][1-9][2-9]"] ,"0$1","0$CC-$1"] ,[,"(\\d{3})(\\d)(\\d{4})","$1-$2-$3",["131","1312"] ,"0$1","0$CC-$1"] @@ -2305,7 +2309,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1","0$CC-$1"] ,[,"(\\d)(\\d{3,4})","$1-$2",["21[0-46-9]"] ,"0$1","0$CC-$1"] -,[,"(\\d{2})(\\d{3,4})","$1-$2",["[3-9][1-9]1","[3-9][1-9]1(?:[0-46-9])"] +,[,"(\\d{2})(\\d{3,4})","$1-$2",["[3-6][1-9]1","[3-6][1-9]1(?:[0-46-9])"] ,"0$1","0$CC-$1"] ,[,"(\\d{4})(\\d{4})","$1-$2",["1(?:5[46-9]|6[04678])","1(?:5(?:44|66|77|88|99)|6(?:00|44|6[16]|70|88))"] ,"$1","0$CC-$1"] @@ -2357,7 +2361,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"LA":[,[,,"[2-57]\\d{7,9}","\\d{6,10}"] ,[,,"(?:[2-57]1|54)\\d{6}","\\d{6,8}"] -,[,,"20(?:2[23]|5[4-6]|77|9[89])\\d{6}","\\d{10}"] +,[,,"20(?:2[23]|5[4-68]|7[78]|9[7-9])\\d{6}","\\d{10}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -2374,7 +2378,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"LB":[,[,,"[13-9]\\d{6,7}","\\d{7,8}"] ,[,,"(?:[14-6]\\d{2}|7(?:[2-57-9]\\d|62)|[89][2-9]\\d)\\d{4}","\\d{7}"] -,[,,"(?:3\\d|7(?:[01]\\d|6[167]))\\d{5}","\\d{7,8}"] +,[,,"(?:3\\d|7(?:[01]\\d|6[136-9]))\\d{5}","\\d{7,8}"] ,[,,"NA","NA"] ,[,,"9[01]\\d{6}","\\d{8}"] ,[,,"8[01]\\d{6}","\\d{8}"] @@ -2382,7 +2386,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,"LB",961,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[13-6]|7(?:[2-57-9]|62)|[89][2-9]"] ,"0$1",""] -,[,"([7-9]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[89][01]|7(?:[01]|6[167])"] +,[,"([7-9]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[89][01]|7(?:[01]|6[136-9])"] ,"0$1",""] ] ,,[,,"NA","NA"] @@ -2439,9 +2443,9 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,,,[,,"NA","NA"] ,[,,"NA","NA"] ] -,"LR":[,[,,"(?:[279]\\d|[4-6]|[38]\\d{2})\\d{6}","\\d{7,9}"] +,"LR":[,[,,"(?:[29]\\d|[4-6]|7\\d{1,2}|[38]\\d{2})\\d{6}","\\d{7,9}"] ,[,,"2\\d{7}","\\d{8}"] -,[,,"(?:4[67]|5\\d|6[4-8]|7\\d{2}|880\\d)\\d{5}","\\d{7,9}"] +,[,,"(?:4[67]|5\\d|6[4-8]|7(?:76\\d|\\d{2})|880\\d)\\d{5}","\\d{7,9}"] ,[,,"NA","NA"] ,[,,"90\\d{6}","\\d{8}"] ,[,,"NA","NA"] @@ -2449,6 +2453,8 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"33200\\d{4}","\\d{9}"] ,"LR",231,"00","0",,,"0",,,,[[,"([279]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[279]"] ,"0$1",""] +,[,"(7\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["7"] +,"0$1",""] ,[,"([4-6])(\\d{3})(\\d{3})","$1 $2 $3",["[4-6]"] ,"0$1",""] ,[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[38]"] @@ -2552,7 +2558,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"MA":[,[,,"[5689]\\d{8}","\\d{9}"] ,[,,"5(?:2(?:(?:[015-7]\\d|2[2-9]|3[2-57]|4[2-8]|8[235-9]|)\\d|9(?:0\\d|[89]0))|3(?:(?:[0-4]\\d|[57][2-9]|6[235-8]|9[3-9])\\d|8(?:0\\d|[89]0)))\\d{4}","\\d{9}"] -,[,,"6(?:0[06]|[14-7]\\d|2[236]|33|99)\\d{6}","\\d{9}"] +,[,,"6(?:0[0-36]|[14-7]\\d|2[236]|3[348]|99)\\d{6}","\\d{9}"] ,[,,"80\\d{7}","\\d{9}"] ,[,,"89\\d{7}","\\d{9}"] ,[,,"NA","NA"] @@ -2592,7 +2598,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"MD":[,[,,"[256-9]\\d{7}","\\d{8}"] ,[,,"(?:2(?:1[0569]|2\\d|3[015-7]|4[1-46-9]|5[0-24689]|6[2-589]|7[1-37]|9[1347-9])|5(?:33|5[257]))\\d{5}","\\d{5,8}"] -,[,,"(?:6(?:0[0-3]|50|7[12]|[89]\\d)|7(?:80|9\\d))\\d{5}","\\d{8}"] +,[,,"(?:6(?:50|7[1-4]|[089]\\d)|7[89]\\d)\\d{5}","\\d{8}"] ,[,,"800\\d{5}","\\d{8}"] ,[,,"90[056]\\d{5}","\\d{8}"] ,[,,"808\\d{5}","\\d{8}"] @@ -2687,7 +2693,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"ML":[,[,,"[246-8]\\d{7}","\\d{8}"] ,[,,"(?:2(?:0(?:2[0-589]|7[027-9])|1(?:2[5-7]|[3-689]\\d))|442\\d)\\d{4}","\\d{8}"] -,[,,"(?:6(?:[569]\\d)|7(?:[08][1-9]|[3579][0-4]|4[014-7]|6\\d))\\d{5}","\\d{8}"] +,[,,"(?:6(?:[3569]\\d)|7(?:[08][1-9]|[3579][0-4]|4[014-7]|[16]\\d))\\d{5}","\\d{8}"] ,[,,"800\\d{5}","\\d{8}"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -2749,7 +2755,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"MO":[,[,,"[268]\\d{7}","\\d{8}"] ,[,,"(?:28[2-57-9]|8[2-57-9]\\d)\\d{5}","\\d{8}"] -,[,,"6[26]\\d{6}","\\d{8}"] +,[,,"6[236]\\d{6}","\\d{8}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -2891,9 +2897,9 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"01 $1",""] ,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2467]|3[12457-9]|5[89]|8[02-9]|9[0-35-9]"] ,"01 $1",""] -,[,"(1)([358]\\d)(\\d{4})(\\d{4})","045 $2 $3 $4",["1(?:33|55|81)"] +,[,"(1)([358]\\d)(\\d{4})(\\d{4})","044 $2 $3 $4",["1(?:33|55|81)"] ,"$1",""] -,[,"(1)(\\d{3})(\\d{3})(\\d{4})","045 $2 $3 $4",["1(?:[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9])"] +,[,"(1)(\\d{3})(\\d{3})(\\d{4})","044 $2 $3 $4",["1(?:[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9])"] ,"$1",""] ] ,[[,"([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["33|55|81"] @@ -2911,7 +2917,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"MY":[,[,,"[13-9]\\d{7,9}","\\d{6,10}"] ,[,,"(?:3\\d{2}|[4-79]\\d|8[2-9])\\d{6}","\\d{6,9}"] -,[,,"1[0-46-9]\\d{7}","\\d{9}"] +,[,,"1(?:[02-46-9][2-9]|11\\d)\\d{6}","\\d{9,10}"] ,[,,"1[38]00\\d{6}","\\d{10}"] ,[,,"1600\\d{6}","\\d{10}"] ,[,,"NA","NA"] @@ -2921,10 +2927,12 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ,[,"(3)(\\d{4})(\\d{4})","$1-$2 $3",["3"] ,"0$1",""] -,[,"([18]\\d)(\\d{3})(\\d{3,4})","$1-$2 $3",["1[0-46-9][1-9]|8"] +,[,"([18]\\d)(\\d{3})(\\d{3,4})","$1-$2 $3",["1[02-46-9][1-9]|8"] ,"0$1",""] ,[,"(1)([36-8]00)(\\d{2})(\\d{4})","$1-$2-$3-$4",["1[36-8]0"] ,"",""] +,[,"(11)(\\d{4})(\\d{4})","$1-$2 $3",["11"] +,"0$1",""] ,[,"(154)(\\d{3})(\\d{4})","$1-$2 $3",["15"] ,"0$1",""] ] @@ -2986,7 +2994,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"NE":[,[,,"[029]\\d{7}","\\d{8}"] ,[,,"2(?:0(?:20|3[1-7]|4[134]|5[14]|6[14578]|7[1-578])|1(?:4[145]|5[14]|6[14-68]|7[169]|88))\\d{4}","\\d{8}"] -,[,,"9[03467]\\d{6}","\\d{8}"] +,[,,"9[0134678]\\d{6}","\\d{8}"] ,[,,"08\\d{6}","\\d{8}"] ,[,,"09\\d{6}","\\d{8}"] ,[,,"NA","NA"] @@ -3020,7 +3028,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"NG":[,[,,"[1-69]\\d{5,8}|[78]\\d{5,13}","\\d{5,14}"] ,[,,"[12]\\d{6,7}|9\\d{7}|(?:4[023568]|5[02368]|6[02-469]|7[569]|8[2-9])\\d{6}|(?:4[47]|5[14579]|6[1578]|7[0-357])\\d{5,6}|(?:78|41)\\d{5}","\\d{5,9}"] -,[,,"(?:70(?:[3-9]\\d|2[1-9])|8(?:0[2-9]|1[23689])\\d)\\d{6}","\\d{10}"] +,[,,"(?:70(?:[3-9]\\d|2[1-9])|8(?:0[2-9]|1[0235689])\\d)\\d{6}","\\d{10}"] ,[,,"800\\d{7,11}","\\d{10,14}"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -3236,7 +3244,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"PG":[,[,,"[1-9]\\d{6,7}","\\d{7,8}"] ,[,,"(?: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}"] -,[,,"(?:68|7(?:[126]\\d|3[1-9]))\\d{5}","\\d{7,8}"] +,[,,"(?:68|7[1236]\\d)\\d{5}","\\d{7,8}"] ,[,,"180\\d{4}","\\d{7}"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -3253,7 +3261,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"PH":[,[,,"[2-9]\\d{7,9}|1800\\d{7,9}","\\d{7,13}"] ,[,,"(?:2|3[2-68]|4[2-9]|5[2-6]|6[2-58]|7[24578]|8[2-8])\\d{7}","\\d{7,9}"] -,[,,"9(?:0[5-9]|1[025-9]|2[0-36-9]|3[0235-9]|4[89]|7[349]|89|9[49])\\d{7}","\\d{10}"] +,[,,"9(?:0[5-9]|1[025-9]|2[0-36-9]|3[02-9]|4[236-9]|7[349]|89|9[49])\\d{7}","\\d{10}"] ,[,,"1800\\d{7,9}","\\d{11,13}"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -3280,7 +3288,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"PK":[,[,,"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)[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}"] -,[,,"3(?:0\\d|1[2-5]|2[1-3]|3[1-6]|4[2-7]|64)\\d{7}","\\d{10}"] +,[,,"3(?:0\\d|1[2-5]|2[1-5]|3[1-6]|4[1-7]|64)\\d{7}","\\d{10}"] ,[,,"800\\d{5}","\\d{8}"] ,[,,"900\\d{5}","\\d{8}"] ,[,,"NA","NA"] @@ -3399,7 +3407,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"PY":[,[,,"5[0-5]\\d{4,7}|[2-46-9]\\d{5,8}","\\d{5,9}"] ,[,,"(?:[26]1|3[289]|4[124678]|7[123]|8[1236])\\d{5,7}|(?:2(?:2[4568]|7[15]|9[1-5])|3(?:18|3[167]|4[2357]|51)|4(?:18|2[45]|3[12]|5[13]|64|71|9[1-47])|5(?:[1-4]\\d|5[0234])|6(?:3[1-3]|44|7[1-4678])|7(?:17|4[0-4]|6[1-578]|75|8[0-8])|858)\\d{5,6}","\\d{5,9}"] -,[,,"9(?:61|7[12356]|8[1-5]|9[1235])\\d{6}","\\d{9}"] +,[,,"9(?:61|7[1-6]|8[1-5]|9[1-5])\\d{6}","\\d{9}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -3418,11 +3426,11 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,,[,,"NA","NA"] ,,,[,,"NA","NA"] -,[,,"[2-9]0\\d{4,7}","\\d{5,9}"] +,[,,"[2-9]0\\d{4,7}","\\d{6,9}"] ] ,"QA":[,[,,"[3-8]\\d{6,7}","\\d{7,8}"] ,[,,"44\\d{6}","\\d{7,8}"] -,[,,"(?:33|55|66|77)\\d{6}","\\d{7,8}"] +,[,,"(?:3[03]|55|66|7[07])\\d{6}","\\d{7,8}"] ,[,,"800\\d{4}","\\d{7,8}"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -3531,7 +3539,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,1] ,"SA":[,[,,"[1-9]\\d{7,10}","\\d{7,11}"] ,[,,"(?:1[24-7]|2[24-8]|3[35-8]|4[34-68]|6[2-5]|7[235-7])\\d{6}","\\d{7,8}"] -,[,,"(?:5[013-69]\\d|8111)\\d{6}","\\d{9,10}"] +,[,,"(?:5[013-689]\\d|8111)\\d{6}","\\d{9,10}"] ,[,,"800\\d{7}","\\d{10}"] ,[,,"9200\\d{7}","\\d{11}"] ,[,,"NA","NA"] @@ -3583,7 +3591,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"SD":[,[,,"[19]\\d{8}","\\d{9}"] ,[,,"1(?:[25]\\d|8[3567])\\d{6}","\\d{9}"] -,[,,"9[1259]\\d{7}","\\d{9}"] +,[,,"9[01259]\\d{7}","\\d{9}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -3643,7 +3651,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"SG":[,[,,"[36]\\d{7}|[17-9]\\d{7,10}","\\d{8,11}"] ,[,,"6[1-8]\\d{6}","\\d{8}"] -,[,,"(?:8[1-5]|9[0-8])\\d{6}","\\d{8}"] +,[,,"(?:8[1-6]|9[0-8])\\d{6}","\\d{8}"] ,[,,"1?800\\d{7}","\\d{10,11}"] ,[,,"1900\\d{7}","\\d{11}"] ,[,,"NA","NA"] @@ -3768,7 +3776,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,1] ,"SN":[,[,,"[37]\\d{8}","\\d{9}"] ,[,,"3(?:010|3(?:8[1-9]|9[2-9]))\\d{5}","\\d{9}"] -,[,,"7(?:0[1256]0|6(?:1[23]|2[89]|3[3489]|4[6-9]|5[1-389]|6[5-9]|7[45]|8[3-8])|7(?:01|1[014-8]|[2-79]\\d|8[019]))\\d{5}","\\d{9}"] +,[,,"7(?:0[1256]0|6(?:1[23]|2[89]|3[3489]|4[6-9]|5[1-9]|6[3-9]|7[45]|8[3-8])|7(?:01|[12-79]\\d|8[0139]))\\d{5}","\\d{9}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -3895,7 +3903,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"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}"] +,[,,"(?:6[36]\\d|77\\d|9(?:5[0-4]|9\\d))\\d{5}","\\d{8}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -3907,24 +3915,23 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,,,[,,"NA","NA"] ,[,,"NA","NA"] ] -,"TG":[,[,,"[02-9]\\d{6,7}","\\d{7,8}"] -,[,,"2?(?:2[2-7]|3[23]|44|55|66|77)\\d{5}","\\d{7,8}"] -,[,,"(?:0[1-9]|7[56]|8[1-7]|9\\d)\\d{5}|9[0-289]\\d{6}","\\d{7,8}"] +,"TG":[,[,,"[29]\\d{7}","\\d{8}"] +,[,,"2(?:2[2-7]|3[23]|44|55|66|77)\\d{5}","\\d{8}"] +,[,,"9[0-289]\\d{6}","\\d{8}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"TG",228,"00",,,,,,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",,"",""] -,[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""] +,"TG",228,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""] ] ,,[,,"NA","NA"] ,,,[,,"NA","NA"] ,[,,"NA","NA"] -,1] -,"TH":[,[,,"[2-8]\\d{7,8}|1\\d{9}","\\d{8,10}"] -,[,,"(?:2[1-9]|3[24-9]|4[2-5]|5[3-6]|7[3-7])\\d{6}","\\d{8}"] -,[,,"8\\d{8}","\\d{9}"] +] +,"TH":[,[,,"[2-9]\\d{7,8}|1\\d{9}","\\d{8,10}"] +,[,,"(?:2[1-9]|3[2-9]|4[2-5]|5[2-6]|7[3-7])\\d{6}","\\d{8}"] +,[,,"[89]\\d{8}","\\d{9}"] ,[,,"1800\\d{6}","\\d{10}"] ,[,,"1900\\d{6}","\\d{10}"] ,[,,"NA","NA"] @@ -3934,7 +3941,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ,[,"([3-7]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[3-7]"] ,"0$1",""] -,[,"(8)(\\d{4})(\\d{4})","$1 $2 $3",["8"] +,[,"([89])(\\d{4})(\\d{4})","$1 $2 $3",["[89]"] ,"0$1",""] ,[,"(1[89]00)(\\d{3})(\\d{3})","$1 $2 $3",["1"] ,"$1",""] @@ -4004,15 +4011,15 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,,,[,,"NA","NA"] ,[,,"NA","NA"] ] -,"TN":[,[,,"[247-9]\\d{7}","\\d{8}"] +,"TN":[,[,,"[2457-9]\\d{7}","\\d{8}"] ,[,,"7\\d{7}","\\d{8}"] -,[,,"(?:[29]\\d|4[01])\\d{6}","\\d{8}"] +,[,,"(?:[29]\\d|4[01]|5[01258]|)\\d{6}","\\d{8}"] ,[,,"NA","NA"] ,[,,"8[028]\\d{6}","\\d{8}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] -,"TN",216,"00",,,,,,,,[[,"([247-9]\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"",""] +,"TN",216,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",,"",""] ] ,,[,,"NA","NA"] ,,,[,,"NA","NA"] @@ -4058,7 +4065,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"TT":[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"] ,[,,"868(?:2(?:01|2[1-5])|6(?:07|1[4-6]|2[1-9]|[3-6]\\d|7[0-79]|9[0-8])|82[12])\\d{4}","\\d{7}(?:\\d{3})?"] -,[,,"868(?:29\\d|3(?:0[1-9]|1[02-9]|[2-9]\\d)|4(?:[679]\\d|8[0-4])|6(?:20|78|8\\d)|7(?:1[02-9]|[2-9]\\d))\\d{4}","\\d{10}"] +,[,,"868(?:29\\d|3(?:0[1-9]|1[02-9]|[2-9]\\d)|4(?:[679]\\d|8[0-4])|6(?:20|78|8\\d)|7(?:03|1[02-9]|[2-9]\\d))\\d{4}","\\d{10}"] ,[,,"8(?:00|55|66|77|88)[2-9]\\d{6}","\\d{10}"] ,[,,"900[2-9]\\d{6}","\\d{10}"] ,[,,"NA","NA"] @@ -4137,7 +4144,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"UG":[,[,,"\\d{9}","\\d{5,9}"] ,[,,"3\\d{8}|4(?:[1-6]\\d|7[136]|8[1356]|96)\\d{6}|20(?:0\\d|24)\\d{5}","\\d{5,9}"] -,[,,"7(?:[15789]\\d|0[0-4])\\d{6}","\\d{9}"] +,[,,"7(?:[15789]\\d|0[0-7])\\d{6}","\\d{9}"] ,[,,"800[123]\\d{5}","\\d{9}"] ,[,,"90[123]\\d{6}","\\d{9}"] ,[,,"NA","NA"] @@ -4345,7 +4352,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"YE":[,[,,"[1-7]\\d{6,8}","\\d{6,9}"] ,[,,"(?:1(?:7\\d|[2-68])|2[2-68]|3[2358]|4[2-58]|5[2-6]|6[3-58]|7[24-68])\\d{5}","\\d{6,8}"] -,[,,"7[137]\\d{7}","\\d{9}"] +,[,,"7[0137]\\d{7}","\\d{9}"] ,[,,"NA","NA"] ,[,,"NA","NA"] ,[,,"NA","NA"] @@ -4353,7 +4360,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,[,,"NA","NA"] ,"YE",967,"00","0",,,"0",,,,[[,"([1-7])(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-6]|7[24-68]"] ,"0$1",""] -,[,"(7[137]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["7[137]"] +,[,"(7\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["7[0137]"] ,"0$1",""] ] ,,[,,"NA","NA"] @@ -4372,9 +4379,9 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,,"269|63",[,,"NA","NA"] ,[,,"NA","NA"] ] -,"ZA":[,[,,"[1-578]\\d{8}","\\d{8,9}"] +,"ZA":[,[,,"[1-5]\\d{8}|(?:7\\d{4,8}|8[1-5789]\\d{3,7})|8[06]\\d{7}","\\d{5,9}"] ,[,,"(?:1[0-8]|2[1-478]|3[1-69]|4\\d|5[1346-8])\\d{7}","\\d{8,9}"] -,[,,"(?:7[1-4689]|8[1-5789])\\d{7}","\\d{9}"] +,[,,"(?:7[1-4689]|8[1-5789])\\d{3,7}","\\d{5,9}"] ,[,,"80\\d{7}","\\d{9}"] ,[,,"86[1-9]\\d{6}","\\d{9}"] ,[,,"860\\d{6}","\\d{9}"] @@ -4384,6 +4391,10 @@ i18n.phonenumbers.metadata.countryToMetadata = { ,"0$1",""] ,[,"([1-578]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[1-57]|8(?:[0-57-9]|6[1-9])"] ,"0$1",""] +,[,"(\\d{2})(\\d{3,4})","$1 $2",["7|8[1-5789]"] +,"0$1",""] +,[,"(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3",["7|8[1-5789]"] +,"0$1",""] ] ,,[,,"NA","NA"] ,,,[,,"NA","NA"] @@ -4391,7 +4402,7 @@ i18n.phonenumbers.metadata.countryToMetadata = { ] ,"ZM":[,[,,"[289]\\d{8}","\\d{9}"] ,[,,"21[1-8]\\d{6}","\\d{9}"] -,[,,"9(?:55|6[3-9]|7[4-9])\\d{6}","\\d{9}"] +,[,,"9(?:5[05]|6[1-9]|7[13-9])\\d{6}","\\d{9}"] ,[,,"800\\d{6}","\\d{9}"] ,[,,"NA","NA"] ,[,,"NA","NA"] diff --git a/javascript/i18n/phonenumbers/phonenumberutil.js b/javascript/i18n/phonenumbers/phonenumberutil.js index b4a856dd4..65629b30d 100644 --- a/javascript/i18n/phonenumbers/phonenumberutil.js +++ b/javascript/i18n/phonenumbers/phonenumberutil.js @@ -1183,6 +1183,13 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.isValidRegionCode_ = i18n.phonenumbers.PhoneNumberUtil.prototype.format = function(number, numberFormat) { + if (number.getNationalNumber() == 0 && number.hasRawInput()) { + /** @type {string} */ + var rawInput = number.getRawInputOrDefault(); + if (rawInput.length > 0) { + return rawInput; + } + } /** @type {number} */ var countryCallingCode = number.getCountryCodeOrDefault(); /** @type {string} */ @@ -2531,6 +2538,10 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.extractCountryCode = /** @type {string} */ var fullNumberStr = fullNumber.toString(); + if ((fullNumberStr.length == 0) || (fullNumberStr.charAt(0) == '0')) { + // Country codes do not begin with a '0'. + return 0; + } /** @type {number} */ var potentialCountryCode; /** @type {number} */ @@ -3030,8 +3041,28 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.parseHelper_ = /** @type {!goog.string.StringBuffer} */ var normalizedNationalNumber = new goog.string.StringBuffer(); /** @type {number} */ - var countryCode = this.maybeExtractCountryCode(nationalNumber.toString(), - regionMetadata, normalizedNationalNumber, keepRawInput, phoneNumber); + var countryCode = 0; + /** @type {string} */ + var nationalNumberStr = nationalNumber.toString(); + try { + countryCode = this.maybeExtractCountryCode(nationalNumberStr, + regionMetadata, normalizedNationalNumber, keepRawInput, phoneNumber); + } catch (e) { + if (e == i18n.phonenumbers.Error.INVALID_COUNTRY_CODE && + i18n.phonenumbers.PhoneNumberUtil.LEADING_PLUS_CHARS_PATTERN_ + .test(nationalNumberStr)) { + // Strip the plus-char, and try again. + nationalNumberStr = nationalNumberStr.replace( + i18n.phonenumbers.PhoneNumberUtil.LEADING_PLUS_CHARS_PATTERN_, ''); + countryCode = this.maybeExtractCountryCode(nationalNumberStr, + regionMetadata, normalizedNationalNumber, keepRawInput, phoneNumber); + if (countryCode == 0) { + throw e; + } + } else { + throw e; + } + } if (countryCode != 0) { /** @type {string} */ var phoneNumberRegion = this.getRegionCodeForCountryCode(countryCode); diff --git a/javascript/i18n/phonenumbers/phonenumberutil_test.html b/javascript/i18n/phonenumbers/phonenumberutil_test.html index 0813d1c97..b3d578f27 100644 --- a/javascript/i18n/phonenumbers/phonenumberutil_test.html +++ b/javascript/i18n/phonenumbers/phonenumberutil_test.html @@ -28,6 +28,7 @@ limitations under the License. + diff --git a/javascript/i18n/phonenumbers/phonenumberutil_test.js b/javascript/i18n/phonenumbers/phonenumberutil_test.js index 424706e84..0e5c2a849 100644 --- a/javascript/i18n/phonenumbers/phonenumberutil_test.js +++ b/javascript/i18n/phonenumbers/phonenumberutil_test.js @@ -18,11 +18,16 @@ /** * @fileoverview Unit tests for the PhoneNumberUtil. * + * Note that these tests use the metadata contained in metadatafortesting.js, + * not the normal metadata files, so should not be used for regression test + * purposes - these tests are illustrative only and test functionality. + * * @author Nikolaos Trogkanis */ goog.require('goog.testing.jsunit'); goog.require('i18n.phonenumbers.PhoneNumberUtil'); +goog.require('i18n.phonenumbers.RegionCode'); /** @type {i18n.phonenumbers.PhoneNumberUtil} */ @@ -179,37 +184,24 @@ US_TOLLFREE.setCountryCode(1); US_TOLLFREE.setNationalNumber(8002530000); -/** - * Enum containing string constants of region codes for easier testing. - * - * @enum {string} - */ -var RegionCode = { - AD: 'AD', - AO: 'AO', - AR: 'AR', - AU: 'AU', - BS: 'BS', - CS: 'CS', - DE: 'DE', - GB: 'GB', - IT: 'IT', - KR: 'KR', - MX: 'MX', - NZ: 'NZ', - PL: 'PL', - RE: 'RE', - SG: 'SG', - US: 'US', - YT: 'YT', - // Official code for the unknown region. - ZZ: 'ZZ' -}; +/** @type {i18n.phonenumbers.PhoneNumber} */ +var US_SPOOF = new i18n.phonenumbers.PhoneNumber(); +US_SPOOF.setCountryCode(1); +US_SPOOF.setNationalNumber(0); + + +/** @type {i18n.phonenumbers.PhoneNumber} */ +var US_SPOOF_WITH_RAW_INPUT = new i18n.phonenumbers.PhoneNumber(); +US_SPOOF_WITH_RAW_INPUT.setCountryCode(1); +US_SPOOF_WITH_RAW_INPUT.setNationalNumber(0); +US_SPOOF_WITH_RAW_INPUT.setRawInput('000-000-0000'); + +var RegionCode = i18n.phonenumbers.RegionCode; function testGetInstanceLoadUSMetadata() { /** @type {i18n.phonenumbers.PhoneMetadata} */ var metadata = phoneUtil.getMetadataForRegion(RegionCode.US); - assertEquals('US', metadata.getId()); + assertEquals(RegionCode.US, metadata.getId()); assertEquals(1, metadata.getCountryCode()); assertEquals('011', metadata.getInternationalPrefix()); assertTrue(metadata.hasNationalPrefix()); @@ -234,7 +226,7 @@ function testGetInstanceLoadUSMetadata() { function testGetInstanceLoadDEMetadata() { /** @type {i18n.phonenumbers.PhoneMetadata} */ var metadata = phoneUtil.getMetadataForRegion(RegionCode.DE); - assertEquals('DE', metadata.getId()); + assertEquals(RegionCode.DE, metadata.getId()); assertEquals(49, metadata.getCountryCode()); assertEquals('00', metadata.getInternationalPrefix()); assertEquals('0', metadata.getNationalPrefix()); @@ -256,7 +248,7 @@ function testGetInstanceLoadDEMetadata() { function testGetInstanceLoadARMetadata() { /** @type {i18n.phonenumbers.PhoneMetadata} */ var metadata = phoneUtil.getMetadataForRegion(RegionCode.AR); - assertEquals('AR', metadata.getId()); + assertEquals(RegionCode.AR, metadata.getId()); assertEquals(54, metadata.getCountryCode()); assertEquals('00', metadata.getInternationalPrefix()); assertEquals('0', metadata.getNationalPrefix()); @@ -448,6 +440,12 @@ function testFormatUSNumber() { phoneUtil.format(US_PREMIUM, PNF.INTERNATIONAL)); assertEquals('+1-900-253-0000', phoneUtil.format(US_PREMIUM, PNF.RFC3966)); + // Numbers with all zeros in the national number part will be formatted by + // using the raw_input if that is available no matter which format is + // specified. + assertEquals('000-000-0000', + phoneUtil.format(US_SPOOF_WITH_RAW_INPUT, PNF.NATIONAL)); + assertEquals('0', phoneUtil.format(US_SPOOF, PNF.NATIONAL)); } function testFormatBSNumber() { @@ -1682,6 +1680,14 @@ function testParseNationalNumber() { NZ_NUMBER.equals(phoneUtil.parse('01164 3 331 6005', RegionCode.US))); assertTrue( NZ_NUMBER.equals(phoneUtil.parse('+64 3 331 6005', RegionCode.US))); + // We should ignore the leading plus here, since it is not followed by a valid + // country code but instead is followed by the IDD for the US. + assertTrue( + NZ_NUMBER.equals(phoneUtil.parse('+01164 3 331 6005', RegionCode.US))); + assertTrue( + NZ_NUMBER.equals(phoneUtil.parse('+0064 3 331 6005', RegionCode.NZ))); + assertTrue( + NZ_NUMBER.equals(phoneUtil.parse('+ 00 64 3 331 6005', RegionCode.NZ))); /** @type {i18n.phonenumbers.PhoneNumber} */ var nzNumber = new i18n.phonenumbers.PhoneNumber(); @@ -1937,6 +1943,18 @@ function testFailedParseOnInvalidNumbers() { i18n.phonenumbers.Error.INVALID_COUNTRY_CODE, e); } + try { + /** @type {string} */ + var plusAndIddAndInvalidCountryCode = '+ 00 210 3 331 6005'; + phoneUtil.parse(plusAndIddAndInvalidCountryCode, RegionCode.NZ); + fail('This should not parse without throwing an exception.'); + } catch (e) { + // Expected this exception. 00 is a correct IDD, but 210 is not a valid + // country code. + assertEquals('Wrong error type stored in exception.', + i18n.phonenumbers.Error.INVALID_COUNTRY_CODE, + e); + } try { /** @type {string} */ var someNumber = '123 456 7890'; diff --git a/javascript/i18n/phonenumbers/regioncodefortesting.js b/javascript/i18n/phonenumbers/regioncodefortesting.js new file mode 100755 index 000000000..552087386 --- /dev/null +++ b/javascript/i18n/phonenumbers/regioncodefortesting.js @@ -0,0 +1,54 @@ +/** + * @license + * Copyright (C) 2011 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. + */ + +/** + * @fileoverview String constants of region codes for testing. + * @author Nikolaos Trogkanis + */ + +goog.provide('i18n.phonenumbers.RegionCode'); + + +/** + * Enum containing string constants of region codes for easier testing. + * + * @enum {string} + */ +i18n.phonenumbers.RegionCode = { + AD: 'AD', + AO: 'AO', + AR: 'AR', + AU: 'AU', + BS: 'BS', + CA: 'CA', + CN: 'CN', + CS: 'CS', + DE: 'DE', + GB: 'GB', + IT: 'IT', + JP: 'JP', + KR: 'KR', + MX: 'MX', + NZ: 'NZ', + PL: 'PL', + RE: 'RE', + SG: 'SG', + US: 'US', + YT: 'YT', + // Official code for the unknown region. + ZZ: 'ZZ' +};