Skip to content

Commit 594d187

Browse files
committed
Merge branch 'dev' into python3
Conflicts: python/phonenumbers/data/region_BD.py python/phonenumbers/data/region_BR.py python/phonenumbers/data/region_CL.py python/phonenumbers/data/region_CN.py python/phonenumbers/data/region_IE.py python/phonenumbers/data/region_IN.py python/phonenumbers/data/region_MA.py python/phonenumbers/data/region_PG.py python/phonenumbers/data/region_PL.py python/phonenumbers/data/region_RO.py python/phonenumbers/data/region_ZA.py python/phonenumbers/geodata/__init__.py python/phonenumbers/phonenumberutil.py python/tests/geocodertest.py python/tests/phonenumberutiltest.py
2 parents c449d6e + 60a45b4 commit 594d187

63 files changed

Lines changed: 1854 additions & 455 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,25 @@ that the phone number is from (unless the number is in E.164 format).
2525
>>> x == y
2626
True
2727

28+
The `PhoneNumber` object that `parse` produces typically still needs to be validated, to check whether
29+
it's a *possible* number (e.g. it has the right number of digits) or a *valid* number (e.g. it's
30+
in an assigned exchange).
31+
32+
>>> z = phonenumbers.parse("+120012301", None)
33+
>>> print z
34+
Country Code: 1 National Number: 20012301 Leading Zero: False
35+
>>> phonenumbers.is_possible_number(z) # too few digits for USA
36+
False
37+
>>> phonenumbers.is_valid_number(z)
38+
False
39+
>>> z = phonenumbers.parse("+12001230101", None)
40+
>>> print z
41+
Country Code: 1 National Number: 2001230101 Leading Zero: False
42+
>>> phonenumbers.is_possible_number(z)
43+
True
44+
>>> phonenumbers.is_valid_number(z) # NPA 200 not used
45+
False
46+
2847
Once you've got a phone number, a common task is to format it in a standardized format. There are a few
2948
formats available (under `PhoneNumberFormat`), and the `format_number` function does the formatting.
3049

python/HISTORY

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
11

2+
=====================
3+
What's new in 5.3b1
4+
=====================
5+
6+
Merge up to upstream Subversion revision 550.
7+
8+
29
=====================
310
What's new in 5.2b1
411
=====================

python/phonenumbers/__init__.py

Lines changed: 105 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,13 +116,115 @@
116116
truncate_too_long_number,)
117117
from .shortnumberutil import connects_to_emergency_number, is_emergency_number
118118
from .phonenumbermatcher import PhoneNumberMatch, PhoneNumberMatcher, Leniency
119-
from .geocoder import (area_description_for_number, country_name_for_number,
120-
description_for_number, description_for_valid_number)
119+
120+
121+
# The geodata occupies a lot of space, so only perform the import on first use
122+
# of geocoder functionality.
123+
def area_description_for_number(*args, **kwargs):
124+
"""Return a text description of the area of a PhoneNumber for the given language.
125+
126+
Arguments:
127+
numobj -- The PhoneNumber object for which we want to get a text description.
128+
lang -- A 2-letter lowercase ISO 639-1 language code for the language in
129+
which the description should be returned (e.g. "en")
130+
script -- A 4-letter titlecase (first letter uppercase, rest lowercase)
131+
ISO script code as defined in ISO 15924, separated by an
132+
underscore (e.g. "Hant")
133+
region -- A 2-letter uppercase ISO 3166-1 country code (e.g. "GB")
134+
135+
Returns a text description in the given language code, for the given phone
136+
number's area, or an empty string if no description is available."""
137+
from .geocoder import area_description_for_number as real_fn
138+
return real_fn(*args, **kwargs)
139+
140+
141+
def country_name_for_number(*args, **kwargs):
142+
"""Return the given PhoneNumber object's country name in the given language.
143+
144+
Arguments:
145+
numobj -- The PhoneNumber object for which we want to get a text description.
146+
lang -- A 2-letter lowercase ISO 639-1 language code for the language in
147+
which the description should be returned (e.g. "en")
148+
script -- A 4-letter titlecase (first letter uppercase, rest lowercase)
149+
ISO script code as defined in ISO 15924, separated by an
150+
underscore (e.g. "Hant")
151+
region -- A 2-letter uppercase ISO 3166-1 country code (e.g. "GB")
152+
153+
The script and region parameters are currently ignored.
154+
155+
Returns a text description in the given language code, for the given phone
156+
number's region, or an empty string if no description is available."""
157+
from .geocoder import country_name_for_number as real_fn
158+
return real_fn(*args, **kwargs)
159+
160+
161+
def description_for_number(*args, **kwargs):
162+
"""Return a text description of a PhoneNumber object for the given language.
163+
164+
The description might consist of the name of the country where the phone
165+
number is from and/or the name of the geographical area the phone number
166+
is from. This function explicitly checks the validity of the number passed in
167+
168+
Arguments:
169+
numobj -- The PhoneNumber object for which we want to get a text description.
170+
lang -- A 2-letter lowercase ISO 639-1 language code for the language in
171+
which the description should be returned (e.g. "en")
172+
script -- A 4-letter titlecase (first letter uppercase, rest lowercase)
173+
ISO script code as defined in ISO 15924, separated by an
174+
underscore (e.g. "Hant")
175+
region -- A 2-letter uppercase ISO 3166-1 country code (e.g. "GB")
176+
177+
Returns a text description in the given language code, for the given phone
178+
number, or an empty string if no description is available."""
179+
from .geocoder import description_for_number as real_fn
180+
return real_fn(*args, **kwargs)
181+
182+
183+
def description_for_valid_number(*args, **kwargs):
184+
"""Return a text description of a PhoneNumber object, in the language
185+
provided.
186+
187+
The description might consist of the name of the country where the phone
188+
number is from and/or the name of the geographical area the phone number
189+
is from if more detailed information is available.
190+
191+
If the phone number is from the same region as the user, only a
192+
lower-level description will be returned, if one exists. Otherwise, the
193+
phone number's region will be returned, with optionally some more detailed
194+
information.
195+
196+
For example, for a user from the region "US" (United States), we would
197+
show "Mountain View, CA" for a particular number, omitting the United
198+
States from the description. For a user from the United Kingdom (region
199+
"GB"), for the same number we may show "Mountain View, CA, United States"
200+
or even just "United States".
201+
202+
This function assumes the validity of the number passed in has already
203+
been checked, and that the number is suitable for geocoding. We consider
204+
fixed-line and mobile numbers possible candidates for geocoding.
205+
206+
Arguments:
207+
numobj -- A valid PhoneNumber object for which we want to get a text
208+
description.
209+
lang -- A 2-letter lowercase ISO 639-1 language code for the language in
210+
which the description should be returned (e.g. "en")
211+
script -- A 4-letter titlecase (first letter uppercase, rest lowercase)
212+
ISO script code as defined in ISO 15924, separated by an
213+
underscore (e.g. "Hant")
214+
region -- The region code for a given user. This region will be omitted
215+
from the description if the phone number comes from this
216+
region. It is a two-letter uppercase ISO country code as
217+
defined by ISO 3166-1.
218+
219+
Returns a text description in the given language code, for the given phone
220+
number, or an empty string if no description is available."""
221+
from .geocoder import description_for_valid_number as real_fn
222+
return real_fn(*args, **kwargs)
121223

122224

123225
# Version number is taken from the upstream libphonenumber version
124226
# together with an indication of the version of the Python-specific code.
125-
__version__ = "5.2b1"
227+
__version__ = "5.3b1"
126228

127229
__all__ = ['PhoneNumber', 'CountryCodeSource', 'FrozenPhoneNumber',
128230
'REGION_CODE_FOR_NON_GEO_ENTITY', 'NumberFormat', 'PhoneNumberDesc', 'PhoneMetadata',

python/phonenumbers/data/__init__.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""Auto-generated file, do not edit by hand."""
2-
# Copyright (C) 2010-2012 The Libphonenumber Authors
2+
# Copyright (C) 2010-2013 The Libphonenumber Authors
33
#
44
# Licensed under the Apache License, Version 2.0 (the "License");
55
# you may not use this file except in compliance with the License.
@@ -86,6 +86,7 @@
8686
from .region_EC import PHONE_METADATA_EC
8787
from .region_EE import PHONE_METADATA_EE
8888
from .region_EG import PHONE_METADATA_EG
89+
from .region_EH import PHONE_METADATA_EH
8990
from .region_ER import PHONE_METADATA_ER
9091
from .region_ES import PHONE_METADATA_ES
9192
from .region_ET import PHONE_METADATA_ET
@@ -325,7 +326,7 @@
325326
95: ("MM",),
326327
98: ("IR",),
327328
211: ("SS",),
328-
212: ("MA",),
329+
212: ("MA", "EH",),
329330
213: ("DZ",),
330331
216: ("TN",),
331332
218: ("LY",),

python/phonenumbers/data/region_BD.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33

44
PHONE_METADATA_BD = PhoneMetadata(id='BD', country_code=880, international_prefix='00[12]?',
55
general_desc=PhoneNumberDesc(national_number_pattern='[2-79]\\d{5,9}|1\\d{9}|8[0-7]\\d{4,8}', possible_number_pattern='\\d{6,10}'),
6-
fixed_line=PhoneNumberDesc(national_number_pattern='2(?:7(?:1[0-267]|2[0-289]|3[0-29]|[46][01]|5[1-3]|7[017]|91)|8(?:0[125]|[139][1-6]|2[0157-9]|6[1-35]|7[1-5]|8[1-8])|9(?:0[0-2]|1[1-4]|2[568]|3[3-6]|5[5-7]|6[0167]|7[15]|8[016-8]))\\d{4}|3(?:[6-8]1|(?:0[23]|[25][12]|82|416)\\d|(?:31|12?[5-7])\\d{2})\\d{3}|4(?:(?:02|[49]6|[68]1)|(?:0[13]|21\\d?|[23]2|[457][12]|6[28])\\d|(?:23|[39]1)\\d{2}|1\\d{3})\\d{3}|5(?:(?:[457-9]1|62)|(?:1\\d?|2[12]|3[1-3]|52)\\d|61{2})|6(?:[45]1|(?:11|2[15]|[39]1)\\d|(?:[06-8]1|62)\\d{2})|7(?:(?:32|91)|(?:02|31|[67][12])\\d|[458]1\\d{2}|21\\d{3})\\d{3}|8(?:(?:4[12]|[5-7]2|1\\d?)|(?:0|3[12]|[5-7]1|217)\\d)\\d{4}|9(?:[35]1|(?:[024]2|81)\\d|(?:1|[24]1)\\d{2})\\d{3}', possible_number_pattern='\\d{6,9}', example_number='27111234'),
6+
fixed_line=PhoneNumberDesc(national_number_pattern='2(?:7(?:1[0-267]|2[0-289]|3[0-29]|[46][01]|5[1-3]|7[017]|91)|8(?:0[125]|[139][1-6]|2[0157-9]|6[1-35]|7[1-5]|8[1-8])|9(?:0[0-2]|1[1-4]|2[568]|3[3-6]|5[5-7]|6[0167]|7[15]|8[016-8]))\\d{4}|3(?:12?[5-7]\\d{2}|0(?:2(?:[025-79]\\d|[348]\\d{1,2})|3(?:[2-4]\\d|[56]\\d?))|2(?:1\\d{2}|2(?:[12]\\d|[35]\\d{1,2}|4\\d?))|3(?:1\\d{2}|2(?:[2356]\\d|4\\d{1,2}))|4(?:1\\d{2}|2(?:2\\d{1,2}|[47]|5\\d{2}))|5(?:1\\d{2}|29)|[67]1\\d{2}|8(?:1\\d{2}|2(?:2\\d{2}|3|4\\d))|)\\d{3}|4(?:0(?:2(?:[09]\\d|7)|33\\d{2})|1\\d{3}|2(?:1\\d{2}|2(?:[25]\\d?|[348]\\d|[67]\\d{1,2}))|3(?:1\\d{2}(?:\\d{2})?|2(?:[045]\\d|[236-9]\\d{1,2})|32\\d{2})|4(?:[18]\\d{2}|2(?:[2-46]\\d{2}|3)|5[25]\\d{2})|5(?:1\\d{2}|2(?:3\\d|5))|6(?:[18]\\d{2}|2(?:3(?:\\d{2})?|[46]\\d{1,2}|5\\d{2}|7\\d)|5(?:3\\d?|4\\d|[57]\\d{1,2}|6\\d{2}|8))|71\\d{2}|8(?:[18]\\d{2}|23\\d{2}|54\\d{2})|9(?:[18]\\d{2}|2[2-5]\\d{2}|53\\d{1,2}))\\d{3}|5(?:02[03489]\\d{2}|1\\d{2}|2(?:1\\d{2}|2(?:2(?:\\d{2})?|[457]\\d{2}))|3(?:1\\d{2}|2(?:[37](?:\\d{2})?|[569]\\d{2}))|4(?:1\\d{2}|2[46]\\d{2})|5(?:1\\d{2}|26\\d{1,2})|6(?:[18]\\d{2}|2|53\\d{2})|7(?:1|24)\\d{2}|8(?:1|26)\\d{2}|91\\d{2})\\d{3}|6(?:0(?:1\\d{2}|2(?:3\\d{2}|4\\d{1,2}))|2(?:2[2-5]\\d{2}|5(?:[3-5]\\d{2}|7)|8\\d{2})|3(?:1|2[3478])\\d{2}|4(?:1|2[34])\\d{2}|5(?:1|2[47])\\d{2}|6(?:[18]\\d{2}|6(?:2(?:2\\d|[34]\\d{2})|5(?:[24]\\d{2}|3\\d|5\\d{1,2})))|72[2-5]\\d{2}|8(?:1\\d{2}|2[2-5]\\d{2})|9(?:1\\d{2}|2[2-6]\\d{2}))\\d{3}|7(?:(?:02|[3-589]1|6[12]|72[24])\\d{2}|21\\d{3}|32)\\d{3}|8(?:(?:4[12]|[5-7]2|1\\d?)|(?:0|3[12]|[5-7]1|217)\\d)\\d{4}|9(?:[35]1|(?:[024]2|81)\\d|(?:1|[24]1)\\d{2})\\d{3}', possible_number_pattern='\\d{6,9}', example_number='27111234'),
77
mobile=PhoneNumberDesc(national_number_pattern='(?:1[13-9]\\d|(?:3[78]|44)[02-9]|6(?:44|6[02-9]))\\d{7}', possible_number_pattern='\\d{10}', example_number='1812345678'),
88
toll_free=PhoneNumberDesc(national_number_pattern='80[03]\\d{7}', possible_number_pattern='\\d{10}', example_number='8001234567'),
99
premium_rate=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
1010
shared_cost=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
1111
personal_number=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
12-
voip=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
12+
voip=PhoneNumberDesc(national_number_pattern='96(?:0[49]|1[0-4]|6[69])\\d{6}', possible_number_pattern='\\d{10}', example_number='9604123456'),
1313
pager=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
1414
uan=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
1515
emergency=PhoneNumberDesc(national_number_pattern='10[0-2]|999', possible_number_pattern='\\d{3}', example_number='999'),
@@ -18,7 +18,7 @@
1818
preferred_international_prefix='00',
1919
national_prefix='0',
2020
national_prefix_for_parsing='0',
21-
number_format=[NumberFormat(pattern='(2)(\\d{7})', format='\\1 \\2', leading_digits_pattern=['2'], national_prefix_formatting_rule='0\\1'),
22-
NumberFormat(pattern='(\\d{2})(\\d{4,6})', format='\\1 \\2', leading_digits_pattern=['[3-79]1'], national_prefix_formatting_rule='0\\1'),
23-
NumberFormat(pattern='(\\d{3})(\\d{3,7})', format='\\1 \\2', leading_digits_pattern=['[3-79][2-9]|8'], national_prefix_formatting_rule='0\\1'),
24-
NumberFormat(pattern='(\\d{4})(\\d{6})', format='\\1 \\2', leading_digits_pattern=['1'], national_prefix_formatting_rule='0\\1')])
21+
number_format=[NumberFormat(pattern='(2)(\\d{7})', format='\\1-\\2', leading_digits_pattern=['2'], national_prefix_formatting_rule='0\\1'),
22+
NumberFormat(pattern='(\\d{2})(\\d{4,6})', format='\\1-\\2', leading_digits_pattern=['[3-79]1'], national_prefix_formatting_rule='0\\1'),
23+
NumberFormat(pattern='(\\d{4})(\\d{3,6})', format='\\1-\\2', leading_digits_pattern=['1|3(?:0|[2-58]2)|4(?:0|[25]2|3[23]|[4689][25])|5(?:[02-578]2|6[25])|6(?:[0347-9]2|[26][25])|7[02-9]2|8(?:[023][23]|[4-7]2)|9(?:[02][23]|[458]2|6[016])'], national_prefix_formatting_rule='0\\1'),
24+
NumberFormat(pattern='(\\d{3})(\\d{3,7})', format='\\1-\\2', leading_digits_pattern=['[3-79][2-9]|8'], national_prefix_formatting_rule='0\\1')])

python/phonenumbers/data/region_BE.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33

44
PHONE_METADATA_BE = PhoneMetadata(id='BE', country_code=32, international_prefix='00',
55
general_desc=PhoneNumberDesc(national_number_pattern='[1-9]\\d{7,8}', possible_number_pattern='\\d{8,9}'),
6-
fixed_line=PhoneNumberDesc(national_number_pattern='(?: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}', possible_number_pattern='\\d{8}', example_number='12345678'),
7-
mobile=PhoneNumberDesc(national_number_pattern='4(?:[679]\\d|8[3-9])\\d{6}', possible_number_pattern='\\d{9}', example_number='470123456'),
6+
fixed_line=PhoneNumberDesc(national_number_pattern='(?:1[0-69]|[23][2-8]|[49][23]|5\\d|6[013-57-9]|71)\\d{6}|8(?:0[1-9]|[1-79]\\d)\\d{5}', possible_number_pattern='\\d{8}', example_number='12345678'),
7+
mobile=PhoneNumberDesc(national_number_pattern='4(?:[679]\\d|8[03-9])\\d{6}', possible_number_pattern='\\d{9}', example_number='470123456'),
88
toll_free=PhoneNumberDesc(national_number_pattern='800\\d{5}', possible_number_pattern='\\d{8}', example_number='80012345'),
99
premium_rate=PhoneNumberDesc(national_number_pattern='(?:90|7[07])\\d{6}', possible_number_pattern='\\d{8}', example_number='90123456'),
10-
shared_cost=PhoneNumberDesc(national_number_pattern='87\\d{6}', possible_number_pattern='\\d{8}', example_number='87123456'),
10+
shared_cost=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
1111
personal_number=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
1212
voip=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
1313
pager=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
14-
uan=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
14+
uan=PhoneNumberDesc(national_number_pattern='78\\d{6}', possible_number_pattern='\\d{8}', example_number='78123456'),
1515
emergency=PhoneNumberDesc(national_number_pattern='1(?:0[01]|12)', possible_number_pattern='\\d{3}', example_number='112'),
1616
voicemail=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
1717
no_international_dialling=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),

python/phonenumbers/data/region_BR.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,13 @@
1818
national_prefix='0',
1919
national_prefix_for_parsing='0(?:(1[245]|2[135]|[34]1)(\\d{10,11}))?',
2020
national_prefix_transform_rule='\\2',
21-
number_format=[NumberFormat(pattern='(\\d{2})(\\d{5})(\\d{4})', format='\\1 \\2-\\3', leading_digits_pattern=['119'], national_prefix_formatting_rule='(\\1)', domestic_carrier_code_formatting_rule='0 $CC (\\1)'),
21+
number_format=[NumberFormat(pattern='(\\d{4})(\\d{4})', format='\\1-\\2', leading_digits_pattern=['[2-9](?:[1-9]|0[1-9])'], national_prefix_formatting_rule='\\1'),
22+
NumberFormat(pattern='(\\d{5})(\\d{4})', format='\\1-\\2', leading_digits_pattern=['9(?:[1-9]|0[1-9])'], national_prefix_formatting_rule='\\1'),
23+
NumberFormat(pattern='(\\d{2})(\\d{5})(\\d{4})', format='\\1 \\2-\\3', leading_digits_pattern=['119'], national_prefix_formatting_rule='(\\1)', domestic_carrier_code_formatting_rule='0 $CC (\\1)'),
2224
NumberFormat(pattern='(\\d{2})(\\d{4})(\\d{4})', format='\\1 \\2-\\3', leading_digits_pattern=['[1-9][1-9]'], national_prefix_formatting_rule='(\\1)', domestic_carrier_code_formatting_rule='0 $CC (\\1)'),
2325
NumberFormat(pattern='([34]00\\d)(\\d{4})', format='\\1-\\2', leading_digits_pattern=['[34]00']),
24-
NumberFormat(pattern='([3589]00)(\\d{2,3})(\\d{4})', format='\\1 \\2 \\3', leading_digits_pattern=['[3589]00'], national_prefix_formatting_rule='0\\1')])
26+
NumberFormat(pattern='([3589]00)(\\d{2,3})(\\d{4})', format='\\1 \\2 \\3', leading_digits_pattern=['[3589]00'], national_prefix_formatting_rule='0\\1')],
27+
intl_number_format=[NumberFormat(pattern='(\\d{2})(\\d{5})(\\d{4})', format='\\1 \\2-\\3', leading_digits_pattern=['119']),
28+
NumberFormat(pattern='(\\d{2})(\\d{4})(\\d{4})', format='\\1 \\2-\\3', leading_digits_pattern=['[1-9][1-9]']),
29+
NumberFormat(pattern='([34]00\\d)(\\d{4})', format='\\1-\\2', leading_digits_pattern=['[34]00']),
30+
NumberFormat(pattern='([3589]00)(\\d{2,3})(\\d{4})', format='\\1 \\2 \\3', leading_digits_pattern=['[3589]00'])])

python/phonenumbers/data/region_BW.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
PHONE_METADATA_BW = PhoneMetadata(id='BW', country_code=267, international_prefix='00',
55
general_desc=PhoneNumberDesc(national_number_pattern='[2-79]\\d{6,7}', possible_number_pattern='\\d{7,8}'),
66
fixed_line=PhoneNumberDesc(national_number_pattern='(?:2(?:4[0-48]|6[0-24]|9[0578])|3(?:1[0235-9]|55|6\\d|7[01]|9[0-57])|4(?:6[03]|7[1267]|9[0-5])|5(?:3[0389]|4[0489]|7[1-47]|88|9[0-49])|6(?:2[1-35]|5[149]|8[067]))\\d{4}', possible_number_pattern='\\d{7}', example_number='2401234'),
7-
mobile=PhoneNumberDesc(national_number_pattern='7(?:[1-35]\\d{6}|[46][0-7]\\d{5})', possible_number_pattern='\\d{8}', example_number='71123456'),
7+
mobile=PhoneNumberDesc(national_number_pattern='7(?:[1-35]\\d{6}|[46][0-7]\\d{5}|7[01]\\d{5})', possible_number_pattern='\\d{8}', example_number='71123456'),
88
toll_free=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
99
premium_rate=PhoneNumberDesc(national_number_pattern='90\\d{5}', possible_number_pattern='\\d{7}', example_number='9012345'),
1010
shared_cost=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),

python/phonenumbers/data/region_BY.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
PHONE_METADATA_BY = PhoneMetadata(id='BY', country_code=375, international_prefix='810',
55
general_desc=PhoneNumberDesc(national_number_pattern='[1-4]\\d{8}|[89]\\d{9,10}', possible_number_pattern='\\d{7,11}'),
6-
fixed_line=PhoneNumberDesc(national_number_pattern='(?:1(?:5(?:1[1-5]|2\\d|6[1-4]|9[1-7])|6(?:[235]\\d|4[1-7])|7\\d{2})|2(?:1(?:[246]\\d|3[0-35-9]|5[1-9])|2(?:[235]\\d|4[0-8])|3(?:2\\d|3[02-79]|4[024-7]|5[0-7])))\\d{5}', possible_number_pattern='\\d{7,9}', example_number='152450911'),
6+
fixed_line=PhoneNumberDesc(national_number_pattern='(?:1(?:5(?:1[1-5]|2\\d|6[2-4]|9[1-7])|6(?:[235]\\d|4[1-7])|7\\d{2})|2(?:1(?:[246]\\d|3[0-35-9]|5[1-9])|2(?:[235]\\d|4[0-8])|3(?:2\\d|3[02-79]|4[024-7]|5[0-7])))\\d{5}', possible_number_pattern='\\d{7,9}', example_number='152450911'),
77
mobile=PhoneNumberDesc(national_number_pattern='(?:2(?:5[5679]|9[1-9])|33\\d|44\\d)\\d{6}', possible_number_pattern='\\d{9}', example_number='294911911'),
88
toll_free=PhoneNumberDesc(national_number_pattern='8(?:0[13]|20\\d)\\d{7}', possible_number_pattern='\\d{10,11}', example_number='8011234567'),
99
premium_rate=PhoneNumberDesc(national_number_pattern='(?:810|902)\\d{7}', possible_number_pattern='\\d{10}', example_number='9021234567'),

0 commit comments

Comments
 (0)