Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-phonenumbers for
openSUSE:Factory checked in at 2026-02-23 16:12:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-phonenumbers (Old)
and /work/SRC/openSUSE:Factory/.python-phonenumbers.new.1977 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-phonenumbers"
Mon Feb 23 16:12:45 2026 rev:49 rq:1334411 version:9.0.24
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-phonenumbers/python-phonenumbers.changes
2026-01-26 12:35:03.995046417 +0100
+++
/work/SRC/openSUSE:Factory/.python-phonenumbers.new.1977/python-phonenumbers.changes
2026-02-23 16:14:33.134288624 +0100
@@ -1,0 +2,6 @@
+Mon Feb 23 08:58:37 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 9.0.24:
+ * Merge upstream 9.0.24 phonenumber updates
+
+-------------------------------------------------------------------
Old:
----
phonenumbers-9.0.22.tar.gz
New:
----
phonenumbers-9.0.24.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-phonenumbers.spec ++++++
--- /var/tmp/diff_new_pack.Vhucdq/_old 2026-02-23 16:14:33.622308717 +0100
+++ /var/tmp/diff_new_pack.Vhucdq/_new 2026-02-23 16:14:33.626308881 +0100
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-phonenumbers
-Version: 9.0.22
+Version: 9.0.24
Release: 0
Summary: Python version of Google's common library for international
phone numbers
License: Apache-2.0
++++++ phonenumbers-9.0.22.tar.gz -> phonenumbers-9.0.24.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/PKG-INFO
new/phonenumbers-9.0.24/PKG-INFO
--- old/phonenumbers-9.0.22/PKG-INFO 2026-01-16 07:30:40.007132500 +0100
+++ new/phonenumbers-9.0.24/PKG-INFO 2026-02-13 12:28:42.968829900 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: phonenumbers
-Version: 9.0.22
+Version: 9.0.24
Summary: Python version of Google's common library for parsing, formatting,
storing and validating international phone numbers.
Author-email: David Drysdale <[email protected]>
License-Expression: Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/__init__.py
new/phonenumbers-9.0.24/phonenumbers/__init__.py
--- old/phonenumbers-9.0.22/phonenumbers/__init__.py 2026-01-16
07:22:23.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/__init__.py 2026-02-13
12:13:24.000000000 +0100
@@ -146,7 +146,7 @@
# Version number is taken from the upstream libphonenumber version
# together with an indication of the version of the Python-specific code.
-__version__ = "9.0.22"
+__version__ = "9.0.24"
__all__ = ['PhoneNumber', 'CountryCodeSource', 'FrozenPhoneNumber',
'REGION_CODE_FOR_NON_GEO_ENTITY', 'NumberFormat',
'PhoneNumberDesc', 'PhoneMetadata',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/phonenumbers-9.0.22/phonenumbers/carrierdata/data0.py
new/phonenumbers-9.0.24/phonenumbers/carrierdata/data0.py
--- old/phonenumbers-9.0.22/phonenumbers/carrierdata/data0.py 2026-01-16
07:22:23.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/carrierdata/data0.py 2026-02-13
12:13:24.000000000 +0100
@@ -153,7 +153,12 @@
'164924':{'en': 'Cable & Wireless'},
'16493':{'en': 'Digicel'},
'164943':{'en': 'Islandcom'},
- '1658295':{'en': 'Cable & Wireless'},
+ '165820':{'en': 'Flow'},
+ '165821':{'en': 'Flow'},
+ '165822':{'en': 'Flow'},
+ '165823':{'en': 'Flow'},
+ '165824':{'en': 'Flow'},
+ '1658295':{'en': 'Flow'},
'1659200':{'en': 'Onvoy'},
'1659222':{'en': 'Onvoy'},
'1659300':{'en': 'Onvoy'},
@@ -1211,6 +1216,7 @@
'24389':{'en': 'Orange'},
'24390':{'en': 'Africell'},
'24391':{'en': 'Africell'},
+ '24396':{'en': 'Airtel'},
'24397':{'en': 'Airtel'},
'24398':{'en': 'Airtel'},
'24399':{'en': 'Airtel'},
@@ -1321,6 +1327,7 @@
'25567':{'en': 'Yas'},
'25568':{'en': 'Airtel'},
'25569':{'en': 'Airtel'},
+ '25570':{'en': 'Yas'},
'25571':{'en': 'Yas'},
'25573':{'en': 'Tanzania Telecom'},
'25574':{'en': 'Vodacom'},
@@ -1906,6 +1913,7 @@
'31687':{'en': 'Lycamobile'},
'3245001':{'en': 'GATEWAY COMMUNICATIONS S.A.'},
'324510':{'en': 'DIGI Communications'},
+ '324511':{'en': 'DIGI Communications'},
'32455':{'en': 'VOO'},
'32456':{'en': 'Mobile Vikings/JIM Mobile'},
'32458':{'en': 'Citymesh'},
@@ -2784,7 +2792,13 @@
'356989':{'en': 'epic'},
'35699':{'en': 'epic'},
'35791':{'en': 'Cytamobile-Vodafone'},
- '35794':{'en': 'Lemontel'},
+ '357940':{'en': 'Cablenet'},
+ '357941':{'en': 'Cablenet'},
+ '357942':{'en': 'Epic'},
+ '357943':{'en': 'Epic'},
+ '357944':{'en': 'Cablenet'},
+ '357945':{'en': 'Cablenet'},
+ '357946':{'en': 'Epic'},
'35795':{'en': 'PrimeTel'},
'35796':{'en': 'MTN'},
'35797':{'en': 'Cytamobile-Vodafone'},
@@ -3369,6 +3383,7 @@
'38164':{'en': 'Telekom Srbija a.d.'},
'38165':{'en': 'Telekom Srbija a.d.'},
'38166':{'en': 'Telekom Srbija a.d.'},
+ '381671':{'en': 'Ringtel'},
'381676':{'en': 'GLOBALTEL'},
'381677':{'en': 'GLOBALTEL'},
'381678':{'en': 'Vectone Mobile'},
@@ -10004,19 +10019,4 @@
'553199769':{'en': 'Telemig Celular'},
'553199771':{'en': 'Telemig Celular'},
'553199772':{'en': 'Telemig Celular'},
- '553199773':{'en': 'Telemig Celular'},
- '553199774':{'en': 'Telemig Celular'},
- '553199775':{'en': 'Telemig Celular'},
- '553199776':{'en': 'Telemig Celular'},
- '553199777':{'en': 'Telemig Celular'},
- '553199778':{'en': 'Telemig Celular'},
- '553199779':{'en': 'Telemig Celular'},
- '553199781':{'en': 'Telemig Celular'},
- '553199782':{'en': 'Telemig Celular'},
- '553199783':{'en': 'Telemig Celular'},
- '553199784':{'en': 'Telemig Celular'},
- '553199785':{'en': 'Telemig Celular'},
- '553199786':{'en': 'Telemig Celular'},
- '553199787':{'en': 'Telemig Celular'},
- '553199788':{'en': 'Telemig Celular'},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/phonenumbers-9.0.22/phonenumbers/carrierdata/data1.py
new/phonenumbers-9.0.24/phonenumbers/carrierdata/data1.py
--- old/phonenumbers-9.0.22/phonenumbers/carrierdata/data1.py 2026-01-16
07:22:23.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/carrierdata/data1.py 2026-02-13
12:13:24.000000000 +0100
@@ -19,6 +19,21 @@
# limitations under the License.
data = {
+ '553199773':{'en': 'Telemig Celular'},
+ '553199774':{'en': 'Telemig Celular'},
+ '553199775':{'en': 'Telemig Celular'},
+ '553199776':{'en': 'Telemig Celular'},
+ '553199777':{'en': 'Telemig Celular'},
+ '553199778':{'en': 'Telemig Celular'},
+ '553199779':{'en': 'Telemig Celular'},
+ '553199781':{'en': 'Telemig Celular'},
+ '553199782':{'en': 'Telemig Celular'},
+ '553199783':{'en': 'Telemig Celular'},
+ '553199784':{'en': 'Telemig Celular'},
+ '553199785':{'en': 'Telemig Celular'},
+ '553199786':{'en': 'Telemig Celular'},
+ '553199787':{'en': 'Telemig Celular'},
+ '553199788':{'en': 'Telemig Celular'},
'553199789':{'en': 'Telemig Celular'},
'553199791':{'en': 'Telemig Celular'},
'553199792':{'en': 'Telemig Celular'},
@@ -10004,19 +10019,4 @@
'5730545':{'en': 'Movil Exito'},
'5730546':{'en': 'Movil Exito'},
'5730547':{'en': 'Movil Exito'},
- '5730548':{'en': 'Movil Exito'},
- '5730550':{'en': 'Tigo'},
- '5730551':{'en': 'Tigo'},
- '5730552':{'en': 'Tigo'},
- '5730553':{'en': 'Tigo'},
- '5730554':{'en': 'Tigo'},
- '5730555':{'en': 'Tigo'},
- '5730556':{'en': 'Tigo'},
- '573057':{'en': 'Tigo'},
- '573058':{'en': 'Tigo'},
- '5730590':{'en': 'Tigo'},
- '5730591':{'en': 'Tigo'},
- '5730592':{'en': 'Tigo'},
- '5730593':{'en': 'Tigo'},
- '5730594':{'en': 'Tigo'},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/phonenumbers-9.0.22/phonenumbers/carrierdata/data2.py
new/phonenumbers-9.0.24/phonenumbers/carrierdata/data2.py
--- old/phonenumbers-9.0.22/phonenumbers/carrierdata/data2.py 2026-01-16
07:22:23.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/carrierdata/data2.py 2026-02-13
12:13:24.000000000 +0100
@@ -19,6 +19,21 @@
# limitations under the License.
data = {
+ '5730548':{'en': 'Movil Exito'},
+ '5730550':{'en': 'Tigo'},
+ '5730551':{'en': 'Tigo'},
+ '5730552':{'en': 'Tigo'},
+ '5730553':{'en': 'Tigo'},
+ '5730554':{'en': 'Tigo'},
+ '5730555':{'en': 'Tigo'},
+ '5730556':{'en': 'Tigo'},
+ '573057':{'en': 'Tigo'},
+ '573058':{'en': 'Tigo'},
+ '5730590':{'en': 'Tigo'},
+ '5730591':{'en': 'Tigo'},
+ '5730592':{'en': 'Tigo'},
+ '5730593':{'en': 'Tigo'},
+ '5730594':{'en': 'Tigo'},
'5730595':{'en': 'Tigo'},
'573102':{'en': 'Claro'},
'573103':{'en': 'Claro'},
@@ -1480,6 +1495,7 @@
'658993':{'en': 'Simba'},
'658994':{'en': 'Simba'},
'658995':{'en': 'M1'},
+ '658996':{'en': 'SingTel'},
'659001':{'en': 'StarHub'},
'659002':{'en': 'StarHub'},
'659003':{'en': 'StarHub'},
@@ -2272,11 +2288,11 @@
'6835':{'en': 'Telecom Niue'},
'6836':{'en': 'Telecom Niue'},
'6838':{'en': 'Telecom Niue'},
- '68571':{'en': 'Bluesky'},
+ '68571':{'en': 'Vodafone'},
'68572':{'en': 'Digicel'},
'68573':{'en': 'Digicel'},
- '68575':{'en': 'Bluesky'},
- '68576':{'en': 'Bluesky'},
+ '68575':{'en': 'Vodafone'},
+ '68576':{'en': 'Vodafone'},
'68577':{'en': 'Digicel'},
'68578':{'en': 'Digicel'},
'68583':{'en': 'Digicel'},
@@ -4302,38 +4318,14 @@
'852987':{'en': 'HKT', 'zh': u('\u9999\u6e2f\u79fb\u52a8\u901a\u8baf'),
'zh_Hant': u('\u9999\u6e2f\u79fb\u52d5\u901a\u8a0a')},
'852988':{'en': 'HKT', 'zh': u('\u9999\u6e2f\u79fb\u52a8\u901a\u8baf'),
'zh_Hant': u('\u9999\u6e2f\u79fb\u52d5\u901a\u8a0a')},
'852989':{'en': 'HKT', 'zh': u('\u9999\u6e2f\u79fb\u52a8\u901a\u8baf')},
- '853620':{'en': 'CTM'},
- '8536200':{'en': 'SmarTone'},
+ '85362':{'en': 'CTM'},
'853621':{'en': 'China Telecom'},
'853622':{'en': '3'},
- '853623':{'en': 'CTM'},
'853624':{'en': '3'},
- '8536242':{'en': 'CTM'},
- '8536243':{'en': 'CTM'},
- '8536244':{'en': 'SmarTone'},
- '8536245':{'en': 'SmarTone'},
- '853625':{'en': 'SmarTone'},
- '8536250':{'en': 'CTM'},
- '8536251':{'en': 'CTM'},
- '8536252':{'en': 'CTM'},
- '8536253':{'en': 'CTM'},
- '853626':{'en': 'SmarTone'},
- '8536264':{'en': 'CTM'},
- '8536265':{'en': 'CTM'},
- '8536266':{'en': 'CTM'},
- '8536267':{'en': 'CTM'},
- '8536270':{'en': 'SmarTone'},
- '8536271':{'en': 'SmarTone'},
- '8536272':{'en': 'CTM'},
- '8536273':{'en': 'CTM'},
- '8536274':{'en': 'CTM'},
- '8536275':{'en': 'CTM'},
'8536276':{'en': '3'},
'8536277':{'en': '3'},
'8536278':{'en': '3'},
'8536279':{'en': '3'},
- '853628':{'en': 'CTM'},
- '853629':{'en': 'CTM'},
'8536292':{'en': '3'},
'8536293':{'en': '3'},
'8536294':{'en': '3'},
@@ -4365,7 +4357,7 @@
'8536348':{'en': 'CTM'},
'8536349':{'en': 'CTM'},
'853635':{'en': 'China Telecom'},
- '853636':{'en': 'SmarTone'},
+ '853636':{'en': 'CTM'},
'853637':{'en': 'China Telecom'},
'8536378':{'en': '3'},
'8536379':{'en': '3'},
@@ -4420,18 +4412,9 @@
'8536544':{'en': 'China Telecom'},
'8536545':{'en': 'CTM'},
'8536546':{'en': 'CTM'},
- '85365470':{'en': 'CTM'},
- '85365471':{'en': 'CTM'},
- '85365472':{'en': 'CTM'},
- '85365473':{'en': 'CTM'},
- '85365474':{'en': 'CTM'},
- '85365475':{'en': 'SmarTone'},
- '85365476':{'en': 'SmarTone'},
- '85365477':{'en': 'SmarTone'},
- '85365478':{'en': 'SmarTone'},
- '85365479':{'en': 'SmarTone'},
- '8536548':{'en': 'SmarTone'},
- '8536549':{'en': 'SmarTone'},
+ '8536547':{'en': 'CTM'},
+ '8536548':{'en': 'CTM'},
+ '8536549':{'en': 'CTM'},
'853655':{'en': 'CTM'},
'8536556':{'en': 'China Telecom'},
'8536557':{'en': 'China Telecom'},
@@ -4453,41 +4436,31 @@
'8536599':{'en': 'China Telecom'},
'85366001':{'en': 'CTM'},
'8536601':{'en': 'CTM'},
- '8536602':{'en': 'SmarTone'},
+ '8536602':{'en': 'CTM'},
'8536603':{'en': '3'},
- '8536604':{'en': 'SmarTone'},
+ '8536604':{'en': 'CTM'},
'8536605':{'en': 'China Telecom'},
+ '853661':{'en': 'CTM'},
'8536610':{'en': '3'},
'8536611':{'en': '3'},
- '8536612':{'en': 'CTM'},
- '8536613':{'en': 'CTM'},
- '8536614':{'en': 'SmarTone'},
- '8536615':{'en': 'SmarTone'},
'8536616':{'en': '3'},
'8536617':{'en': '3'},
- '8536618':{'en': 'CTM'},
- '8536619':{'en': 'CTM'},
- '853662':{'en': 'SmarTone'},
+ '853662':{'en': 'CTM'},
'853663':{'en': '3'},
'853664':{'en': '3'},
- '8536640':{'en': 'SmarTone'},
- '8536641':{'en': 'SmarTone'},
+ '8536640':{'en': 'CTM'},
+ '8536641':{'en': 'CTM'},
'8536647':{'en': 'CTM'},
'8536649':{'en': 'China Telecom'},
'853665':{'en': 'CTM'},
'8536656':{'en': '3'},
'8536657':{'en': '3'},
'853666':{'en': 'CTM'},
+ '853667':{'en': 'CTM'},
'8536670':{'en': 'China Telecom'},
'8536671':{'en': 'China Telecom'},
- '8536672':{'en': 'CTM'},
- '8536673':{'en': 'SmarTone'},
'8536674':{'en': '3'},
- '8536675':{'en': 'CTM'},
'8536676':{'en': '3'},
- '8536677':{'en': 'CTM'},
- '8536678':{'en': 'SmarTone'},
- '8536679':{'en': 'CTM'},
'853668':{'en': 'CTM'},
'8536690':{'en': 'Guangxing Communication Co'},
'8536691':{'en': 'Guangxing Communication Co'},
@@ -4509,18 +4482,9 @@
'8536807':{'en': '3'},
'8536808':{'en': '3'},
'8536809':{'en': '3'},
- '8536810':{'en': 'CTM'},
- '8536811':{'en': 'CTM'},
- '8536812':{'en': 'CTM'},
- '8536813':{'en': 'CTM'},
- '8536814':{'en': 'CTM'},
- '8536815':{'en': 'SmarTone'},
- '8536816':{'en': 'SmarTone'},
- '8536817':{'en': 'SmarTone'},
- '8536818':{'en': 'SmarTone'},
- '8536819':{'en': 'SmarTone'},
+ '853681':{'en': 'CTM'},
'853682':{'en': 'China Telecom'},
- '853683':{'en': 'SmarTone'},
+ '853683':{'en': 'CTM'},
'8536840':{'en': '3'},
'8536841':{'en': '3'},
'8536842':{'en': '3'},
@@ -4542,11 +4506,11 @@
'8536858':{'en': 'CTM'},
'8536859':{'en': 'CTM'},
'853686':{'en': 'China Telecom'},
- '8536870':{'en': 'SmarTone'},
- '8536871':{'en': 'SmarTone'},
- '8536872':{'en': 'SmarTone'},
- '8536873':{'en': 'SmarTone'},
- '8536874':{'en': 'SmarTone'},
+ '8536870':{'en': 'CTM'},
+ '8536871':{'en': 'CTM'},
+ '8536872':{'en': 'CTM'},
+ '8536873':{'en': 'CTM'},
+ '8536874':{'en': 'CTM'},
'8536875':{'en': '3'},
'8536876':{'en': '3'},
'8536877':{'en': '3'},
@@ -8347,7 +8311,9 @@
'966576':{'en': 'Lebara'},
'966577':{'en': 'Lebara'},
'966578':{'en': 'Lebara'},
- '966579':{'en': 'Lebara'},
+ '966579':{'en': 'STC'},
+ '9665790':{'en': 'Lebara'},
+ '9665791':{'en': 'Lebara'},
'96658':{'en': 'Zain'},
'96659':{'en': 'Zain'},
'96770':{'en': 'Y'},
@@ -8500,7 +8466,16 @@
'9751':{'en': 'B-Mobile of Bhutan Telecom'},
'97577':{'en': 'TashiCell of Tashi InfoComm'},
'97587':{'en': 'TashiCell of Tashi InfoComm'},
- '97650':{'en': 'Unitel'},
+ '976500':{'en': 'Unitel'},
+ '976501':{'en': 'Unitel'},
+ '976502':{'en': 'Unitel'},
+ '976503':{'en': 'Unitel'},
+ '976504':{'en': 'Unitel'},
+ '976505':{'en': 'Mobicom'},
+ '976506':{'en': 'Mobicom'},
+ '976507':{'en': 'Mobicom'},
+ '976508':{'en': 'Mobicom'},
+ '976509':{'en': 'Mobicom'},
'97655':{'en': 'Unitel'},
'97660':{'en': 'ONDO'},
'97666':{'en': 'ONDO'},
@@ -8560,6 +8535,7 @@
'989982':{'en': 'Shatel Mobile', 'fa': u('\u0634\u0627\u062a\u0644
\u0645\u0648\u0628\u0627\u06cc\u0644')},
'989990':{'en': 'IR-MCI', 'fa': u('\u0647\u0645\u0631\u0627\u0647
\u0627\u0648\u0644')},
'989991':{'en': 'Irancell', 'fa':
u('\u0627\u06cc\u0631\u0627\u0646\u0633\u0644')},
+ '989993':{'en': 'Aptel', 'fa': u('\u0622\u067e\u062a\u0644')},
'989995':{'en': 'IR-MCI', 'fa': u('\u0647\u0645\u0631\u0627\u0647
\u0627\u0648\u0644')},
'989996':{'en': 'IR-MCI', 'fa': u('\u0647\u0645\u0631\u0627\u0647
\u0627\u0648\u0644')},
'989998':{'en': 'Rightel', 'fa': u('\u0631\u0627\u06cc\u062a\u0644')},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/phonenumbers-9.0.22/phonenumbers/data/alt_format_352.py
new/phonenumbers-9.0.24/phonenumbers/data/alt_format_352.py
--- old/phonenumbers-9.0.22/phonenumbers/data/alt_format_352.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/alt_format_352.py 2026-02-13
12:13:23.000000000 +0100
@@ -1,4 +1,4 @@
"""Auto-generated file, do not edit by hand. 352 metadata"""
from ..phonemetadata import NumberFormat
-PHONE_ALT_FORMAT_352 = [NumberFormat(pattern='(\\d{2})(\\d{3})(\\d{3})',
format='\\1 \\2 \\3', leading_digits_pattern=['2(?:[0367]|4[3-8])'])]
+PHONE_ALT_FORMAT_352 = [NumberFormat(pattern='(\\d{2})(\\d{3})(\\d{3})',
format='\\1 \\2 \\3', leading_digits_pattern=['20'])]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/phonenumbers-9.0.22/phonenumbers/data/alt_format_595.py
new/phonenumbers-9.0.24/phonenumbers/data/alt_format_595.py
--- old/phonenumbers-9.0.22/phonenumbers/data/alt_format_595.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/alt_format_595.py 2026-02-13
12:13:23.000000000 +0100
@@ -1,4 +1,4 @@
"""Auto-generated file, do not edit by hand. 595 metadata"""
from ..phonemetadata import NumberFormat
-PHONE_ALT_FORMAT_595 = [NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{3})',
format='\\1 \\2 \\3',
leading_digits_pattern=['[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]']),
NumberFormat(pattern='(\\d{2})(\\d{6,7})', format='\\1 \\2',
leading_digits_pattern=['2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]']),
NumberFormat(pattern='(\\d{3})(\\d{6})', format='\\1 \\2',
leading_digits_pattern=['2[279]|3[13-5]|4[359]|5[1-5]|6(?:[34]|7[1-46-8])|7[46-8]|85'])]
+PHONE_ALT_FORMAT_595 = [NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{3})',
format='\\1 \\2 \\3', leading_digits_pattern=['3[289]|4|61|7[1-3]|8[1-36]']),
NumberFormat(pattern='(\\d{2})(\\d{6,7})', format='\\1 \\2',
leading_digits_pattern=['2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]']),
NumberFormat(pattern='(\\d{3})(\\d{6})', format='\\1 \\2',
leading_digits_pattern=['2[279]|3[13-5]|4[359]|5[1-5]|6(?:[34]|7[1-46-8])|7[46-8]|85'])]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_AS.py
new/phonenumbers-9.0.24/phonenumbers/data/region_AS.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_AS.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_AS.py 2026-02-13
12:13:23.000000000 +0100
@@ -3,8 +3,8 @@
PHONE_METADATA_AS = PhoneMetadata(id='AS', country_code=1,
international_prefix='011',
general_desc=PhoneNumberDesc(national_number_pattern='(?:[58]\\d\\d|684|900)\\d{7}',
possible_length=(10,), possible_length_local_only=(7,)),
-
fixed_line=PhoneNumberDesc(national_number_pattern='6846(?:22|33|44|55|77|88|9[19])\\d{4}',
example_number='6846221234', possible_length=(10,),
possible_length_local_only=(7,)),
-
mobile=PhoneNumberDesc(national_number_pattern='684(?:2(?:48|5[2468]|7[26])|7(?:3[13]|70|82))\\d{4}',
example_number='6847331234', possible_length=(10,),
possible_length_local_only=(7,)),
+
fixed_line=PhoneNumberDesc(national_number_pattern='684(?:274|6(?:22|33|44|55|77|88|9[19]))\\d{4}',
example_number='6846221234', possible_length=(10,),
possible_length_local_only=(7,)),
+
mobile=PhoneNumberDesc(national_number_pattern='684(?:2(?:48|5[2468]|7[246])|7(?:3[13]|70|82))\\d{4}',
example_number='6847331234', possible_length=(10,),
possible_length_local_only=(7,)),
toll_free=PhoneNumberDesc(national_number_pattern='8(?:00|33|44|55|66|77|88)[2-9]\\d{6}',
example_number='8002123456', possible_length=(10,)),
premium_rate=PhoneNumberDesc(national_number_pattern='900[2-9]\\d{6}',
example_number='9002123456', possible_length=(10,)),
personal_number=PhoneNumberDesc(national_number_pattern='52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\d{6}',
example_number='5002345678', possible_length=(10,)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_BE.py
new/phonenumbers-9.0.24/phonenumbers/data/region_BE.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_BE.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_BE.py 2026-02-13
12:13:23.000000000 +0100
@@ -4,7 +4,7 @@
PHONE_METADATA_BE = PhoneMetadata(id='BE', country_code=32,
international_prefix='00',
general_desc=PhoneNumberDesc(national_number_pattern='4\\d{8}|[1-9]\\d{7}',
possible_length=(8, 9)),
fixed_line=PhoneNumberDesc(national_number_pattern='80[2-8]\\d{5}|(?:1[0-69]|[23][2-8]|4[23]|5\\d|6[013-57-9]|71|8[1-79]|9[2-4])\\d{6}',
example_number='12345678', possible_length=(8,)),
- mobile=PhoneNumberDesc(national_number_pattern='4[5-9]\\d{7}',
example_number='470123456', possible_length=(9,)),
+ mobile=PhoneNumberDesc(national_number_pattern='4[5-9]\\d{7}',
example_number='450001234', possible_length=(9,)),
toll_free=PhoneNumberDesc(national_number_pattern='800[1-9]\\d{4}',
example_number='80012345', possible_length=(8,)),
premium_rate=PhoneNumberDesc(national_number_pattern='(?:70(?:2[0-57]|3[04-7]|44|6[04-69]|7[0579])|90\\d\\d)\\d{4}',
example_number='90012345', possible_length=(8,)),
shared_cost=PhoneNumberDesc(national_number_pattern='7879\\d{4}',
example_number='78791234', possible_length=(8,)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_CD.py
new/phonenumbers-9.0.24/phonenumbers/data/region_CD.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_CD.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_CD.py 2026-02-13
12:13:23.000000000 +0100
@@ -4,7 +4,7 @@
PHONE_METADATA_CD = PhoneMetadata(id='CD', country_code=243,
international_prefix='00',
general_desc=PhoneNumberDesc(national_number_pattern='(?:(?:[189]|5\\d)\\d|2)\\d{7}|[1-68]\\d{6}',
possible_length=(7, 8, 9, 10)),
fixed_line=PhoneNumberDesc(national_number_pattern='(?:(?:12|573)\\d\\d|276)\\d{5}|[1-6]\\d{6}',
example_number='1234567', possible_length=(7, 8, 9, 10)),
-
mobile=PhoneNumberDesc(national_number_pattern='88\\d{5}|(?:8[0-69]|9[017-9])\\d{7}',
example_number='991234567', possible_length=(7, 9)),
+
mobile=PhoneNumberDesc(national_number_pattern='88\\d{5}|(?:8[0-69]|9[016-9])\\d{7}',
example_number='991234567', possible_length=(7, 9)),
national_prefix='0',
national_prefix_for_parsing='0',
number_format=[NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{3})',
format='\\1 \\2 \\3', leading_digits_pattern=['88'],
national_prefix_formatting_rule='0\\1'),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_CF.py
new/phonenumbers-9.0.24/phonenumbers/data/region_CF.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_CF.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_CF.py 2026-02-13
12:13:23.000000000 +0100
@@ -2,8 +2,8 @@
from ..phonemetadata import NumberFormat, PhoneNumberDesc, PhoneMetadata
PHONE_METADATA_CF = PhoneMetadata(id='CF', country_code=236,
international_prefix='00',
-
general_desc=PhoneNumberDesc(national_number_pattern='(?:[27]\\d{3}|8776)\\d{4}',
possible_length=(8,)),
- fixed_line=PhoneNumberDesc(national_number_pattern='2[12]\\d{6}',
example_number='21612345', possible_length=(8,)),
+
general_desc=PhoneNumberDesc(national_number_pattern='8776\\d{4}|(?:[27]\\d|61)\\d{6}',
possible_length=(8,)),
+ fixed_line=PhoneNumberDesc(national_number_pattern='(?:2[12]|61)\\d{6}',
example_number='21612345', possible_length=(8,)),
mobile=PhoneNumberDesc(national_number_pattern='7[02-7]\\d{6}',
example_number='70012345', possible_length=(8,)),
premium_rate=PhoneNumberDesc(national_number_pattern='8776\\d{4}',
example_number='87761234', possible_length=(8,)),
- number_format=[NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{2})(\\d{2})',
format='\\1 \\2 \\3 \\4', leading_digits_pattern=['[278]'])])
+ number_format=[NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{2})(\\d{2})',
format='\\1 \\2 \\3 \\4', leading_digits_pattern=['[26-8]'])])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_EH.py
new/phonenumbers-9.0.24/phonenumbers/data/region_EH.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_EH.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_EH.py 2026-02-13
12:13:23.000000000 +0100
@@ -9,5 +9,4 @@
premium_rate=PhoneNumberDesc(national_number_pattern='89\\d{7}',
example_number='891234567', possible_length=(9,)),
voip=PhoneNumberDesc(national_number_pattern='(?:592(?:4[0-2]|93)|80[89]\\d\\d)\\d{4}',
example_number='592401234', possible_length=(9,)),
national_prefix='0',
- national_prefix_for_parsing='0',
- leading_digits='528[89]')
+ national_prefix_for_parsing='0')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_GY.py
new/phonenumbers-9.0.24/phonenumbers/data/region_GY.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_GY.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_GY.py 2026-02-13
12:13:23.000000000 +0100
@@ -4,7 +4,7 @@
PHONE_METADATA_GY = PhoneMetadata(id='GY', country_code=592,
international_prefix='001',
general_desc=PhoneNumberDesc(national_number_pattern='(?:[2-8]\\d{3}|9008)\\d{3}',
possible_length=(7,)),
fixed_line=PhoneNumberDesc(national_number_pattern='(?:2(?:1[6-9]|2[0-35-9]|3[1-4]|5[3-9]|6\\d|7[0-79])|3(?:2[25-9]|3\\d)|4(?:4[0-24]|5[56])|50[0-6]|77[1-57])\\d{4}',
example_number='2201234', possible_length=(7,)),
-
mobile=PhoneNumberDesc(national_number_pattern='(?:51[01]|6\\d\\d|7(?:[0-5]\\d|6[0-59]|70))\\d{4}',
example_number='6091234', possible_length=(7,)),
+
mobile=PhoneNumberDesc(national_number_pattern='(?:51[01]|6\\d\\d|7(?:[0-5]\\d|6[0-69]|70))\\d{4}',
example_number='6091234', possible_length=(7,)),
toll_free=PhoneNumberDesc(national_number_pattern='(?:289|8(?:00|6[28]|88|99))\\d{4}',
example_number='2891234', possible_length=(7,)),
premium_rate=PhoneNumberDesc(national_number_pattern='9008\\d{3}',
example_number='9008123', possible_length=(7,)),
voip=PhoneNumberDesc(national_number_pattern='515\\d{4}',
example_number='5151234', possible_length=(7,)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_HT.py
new/phonenumbers-9.0.24/phonenumbers/data/region_HT.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_HT.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_HT.py 2026-02-13
12:13:23.000000000 +0100
@@ -4,7 +4,7 @@
PHONE_METADATA_HT = PhoneMetadata(id='HT', country_code=509,
international_prefix='00',
general_desc=PhoneNumberDesc(national_number_pattern='[2-589]\\d{7}',
possible_length=(8,)),
fixed_line=PhoneNumberDesc(national_number_pattern='2(?:2\\d|5[1-5]|81|9[149])\\d{5}',
example_number='22453300', possible_length=(8,)),
- mobile=PhoneNumberDesc(national_number_pattern='(?:[34]\\d|5[56])\\d{6}',
example_number='34101234', possible_length=(8,)),
+ mobile=PhoneNumberDesc(national_number_pattern='(?:[34]\\d|5[568])\\d{6}',
example_number='34101234', possible_length=(8,)),
toll_free=PhoneNumberDesc(national_number_pattern='8\\d{7}',
example_number='80012345', possible_length=(8,)),
voip=PhoneNumberDesc(national_number_pattern='9(?:[67][0-4]|8[0-3589]|9\\d)\\d{5}',
example_number='98901234', possible_length=(8,)),
number_format=[NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{4})',
format='\\1 \\2 \\3', leading_digits_pattern=['[2-589]'])])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_IR.py
new/phonenumbers-9.0.24/phonenumbers/data/region_IR.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_IR.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_IR.py 2026-02-13
12:13:23.000000000 +0100
@@ -3,8 +3,8 @@
PHONE_METADATA_IR = PhoneMetadata(id='IR', country_code=98,
international_prefix='00',
general_desc=PhoneNumberDesc(national_number_pattern='[1-9]\\d{9}|(?:[1-8]\\d\\d|9)\\d{3,4}',
possible_length=(4, 5, 6, 7, 10), possible_length_local_only=(8,)),
-
fixed_line=PhoneNumberDesc(national_number_pattern='(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])(?:[03-57]\\d{7}|[16]\\d{3}(?:\\d{4})?|[289]\\d{3}(?:\\d(?:\\d{3})?)?)|94(?:000[09]|(?:12\\d|30[0-2])\\d|2(?:121|[2689]0\\d)|4(?:111|40\\d))\\d{4}',
example_number='2123456789', possible_length=(6, 7, 10),
possible_length_local_only=(4, 5, 8)),
-
mobile=PhoneNumberDesc(national_number_pattern='9(?:(?:0[0-5]|[13]\\d|2[0-3])\\d\\d|9(?:[0-46]\\d\\d|5(?:10|5\\d)|8(?:[12]\\d|88)|9(?:[0159]\\d|21|69|77|8[7-9])))\\d{5}',
example_number='9123456789', possible_length=(10,)),
+
fixed_line=PhoneNumberDesc(national_number_pattern='(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])(?:[03-57]\\d{7}|[16]\\d{3}(?:\\d{4})?|[289]\\d{3}(?:\\d(?:\\d{3})?)?)|94(?:000[09]|(?:12\\d|30[0-2])\\d|2(?:[02689]0\\d|121)|4(?:111|40\\d))\\d{4}',
example_number='2123456789', possible_length=(6, 7, 10),
possible_length_local_only=(4, 5, 8)),
+
mobile=PhoneNumberDesc(national_number_pattern='9(?:(?:0[0-5]|[13]\\d|2[0-3])\\d\\d|9(?:[0-46]\\d\\d|5(?:10|5\\d)|8(?:[12]\\d|88)|9(?:[01359]\\d|21|69|77|8[7-9])))\\d{5}',
example_number='9123456789', possible_length=(10,)),
uan=PhoneNumberDesc(national_number_pattern='96(?:0[12]|2[16-8]|3(?:08|[14]5|[23]|66)|4(?:0|80)|5[01]|6[89]|86|9[19])',
example_number='9601', possible_length=(4, 5)),
no_international_dialling=PhoneNumberDesc(national_number_pattern='9(?:4440\\d{5}|6(?:0[12]|2[16-8]|3(?:08|[14]5|[23]|66)|4(?:0|80)|5[01]|6[89]|86|9[19]))',
possible_length=(4, 5, 10)),
national_prefix='0',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_JM.py
new/phonenumbers-9.0.24/phonenumbers/data/region_JM.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_JM.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_JM.py 2026-02-13
12:13:23.000000000 +0100
@@ -3,8 +3,8 @@
PHONE_METADATA_JM = PhoneMetadata(id='JM', country_code=1,
international_prefix='011',
general_desc=PhoneNumberDesc(national_number_pattern='(?:[58]\\d\\d|658|900)\\d{7}',
possible_length=(10,), possible_length_local_only=(7,)),
-
fixed_line=PhoneNumberDesc(national_number_pattern='8766060\\d{3}|(?:658(?:2(?:[0-8]\\d|9[0-46-9])|[3-9]\\d\\d)|876(?:52[35]|6(?:0[1-3579]|1[0235-9]|[23]\\d|40|5[06]|6[2-589]|7[0-25-9]|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}',
example_number='8765230123', possible_length=(10,),
possible_length_local_only=(7,)),
-
mobile=PhoneNumberDesc(national_number_pattern='(?:658295|876(?:2(?:0[1-9]|[13-9]\\d|2[013-9])|[348]\\d\\d|5(?:0[1-9]|[1-9]\\d)|6(?:4[89]|6[67])|7(?:0[07]|7\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579])))\\d{4}',
example_number='8762101234', possible_length=(10,),
possible_length_local_only=(7,)),
+
fixed_line=PhoneNumberDesc(national_number_pattern='8766060\\d{3}|(?:658(?:2(?:[5-8]\\d|9[0-46-9])|[3-9]\\d\\d)|876(?:52[35]|6(?:0[1-3579]|1[0235-9]|[23]\\d|40|5[06]|6[2-589]|7[0-25-9]|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}',
example_number='8765230123', possible_length=(10,),
possible_length_local_only=(7,)),
+
mobile=PhoneNumberDesc(national_number_pattern='(?:6582(?:[0-4]\\d|95)|876(?:2(?:0[1-9]|[13-9]\\d|2[013-9])|[348]\\d\\d|5(?:0[1-9]|[1-9]\\d)|6(?:4[89]|6[67])|7(?:0[07]|7\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579])))\\d{4}',
example_number='8762101234', possible_length=(10,),
possible_length_local_only=(7,)),
toll_free=PhoneNumberDesc(national_number_pattern='8(?:00|33|44|55|66|77|88)[2-9]\\d{6}',
example_number='8002123456', possible_length=(10,)),
premium_rate=PhoneNumberDesc(national_number_pattern='900[2-9]\\d{6}',
example_number='9002123456', possible_length=(10,)),
personal_number=PhoneNumberDesc(national_number_pattern='52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\d{6}',
example_number='5002345678', possible_length=(10,)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_KZ.py
new/phonenumbers-9.0.24/phonenumbers/data/region_KZ.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_KZ.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_KZ.py 2026-02-13
12:13:23.000000000 +0100
@@ -2,8 +2,8 @@
from ..phonemetadata import NumberFormat, PhoneNumberDesc, PhoneMetadata
PHONE_METADATA_KZ = PhoneMetadata(id='KZ', country_code=7,
international_prefix='810',
-
general_desc=PhoneNumberDesc(national_number_pattern='(?:33622|8\\d{8})\\d{5}|[78]\\d{9}',
possible_length=(10, 14), possible_length_local_only=(5, 6, 7)),
-
fixed_line=PhoneNumberDesc(national_number_pattern='(?:33622|7(?:1(?:0(?:[23]\\d|4[0-3]|59|63)|1(?:[23]\\d|4[0-79]|59)|2(?:[23]\\d|59)|3(?:2\\d|3[0-79]|4[0-35-9]|59)|4(?:[24]\\d|3[013-9]|5[1-9]|97)|5(?:2\\d|3[1-9]|4[0-7]|59)|6(?:[2-4]\\d|5[19]|61)|72\\d|8(?:[27]\\d|3[1-46-9]|4[0-5]|59))|2(?:1(?:[23]\\d|4[46-9]|5[3469])|2(?:2\\d|3[0679]|46|5[12679])|3(?:[2-4]\\d|5[139])|4(?:2\\d|3[1-35-9]|59)|5(?:[23]\\d|4[0-8]|59|61)|6(?:2\\d|3[1-9]|4[0-4]|59)|7(?:[2379]\\d|40|5[279])|8(?:[23]\\d|4[0-3]|59)|9(?:2\\d|3[124578]|59))))\\d{5}',
example_number='7123456789', possible_length=(10,),
possible_length_local_only=(5, 6, 7)),
+
general_desc=PhoneNumberDesc(national_number_pattern='8\\d{13}|[78]\\d{9}',
possible_length=(10, 14), possible_length_local_only=(5, 6, 7)),
+
fixed_line=PhoneNumberDesc(national_number_pattern='7(?:1(?:0(?:[23]\\d|4[0-3]|59|63)|1(?:[23]\\d|4[0-79]|59)|2(?:[23]\\d|59)|3(?:2\\d|3[0-79]|4[0-35-9]|59)|4(?:[24]\\d|3[013-9]|5[1-9]|97)|5(?:2\\d|3[1-9]|4[0-7]|59)|6(?:[2-4]\\d|5[19]|61)|72\\d|8(?:[27]\\d|3[1-46-9]|4[0-5]|59))|2(?:1(?:[23]\\d|4[46-9]|5[3469])|2(?:2\\d|3[0679]|46|5[12679])|3(?:[2-4]\\d|5[139])|4(?:2\\d|3[1-35-9]|59)|5(?:[23]\\d|4[0-8]|59|61)|6(?:2\\d|3[1-9]|4[0-4]|59)|7(?:[2379]\\d|40|5[279])|8(?:[23]\\d|4[0-3]|59)|9(?:2\\d|3[124578]|59)))\\d{5}',
example_number='7123456789', possible_length=(10,),
possible_length_local_only=(5, 6, 7)),
mobile=PhoneNumberDesc(national_number_pattern='7(?:0[0-25-8]|47|6[0-4]|7[15-8]|85)\\d{7}',
example_number='7710009998', possible_length=(10,)),
toll_free=PhoneNumberDesc(national_number_pattern='8(?:00|108\\d{3})\\d{7}',
example_number='8001234567', possible_length=(10, 14)),
premium_rate=PhoneNumberDesc(national_number_pattern='809\\d{7}',
example_number='8091234567', possible_length=(10,)),
@@ -13,5 +13,5 @@
preferred_international_prefix='8~10',
national_prefix='8',
national_prefix_for_parsing='8',
- leading_digits='33622|7',
+ leading_digits='7',
mobile_number_portable_region=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_LU.py
new/phonenumbers-9.0.24/phonenumbers/data/region_LU.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_LU.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_LU.py 2026-02-13
12:13:23.000000000 +0100
@@ -4,7 +4,7 @@
PHONE_METADATA_LU = PhoneMetadata(id='LU', country_code=352,
international_prefix='00',
general_desc=PhoneNumberDesc(national_number_pattern='35[013-9]\\d{4,8}|6\\d{8}|35\\d{2,4}|(?:[2457-9]\\d|3[0-46-9])\\d{2,9}',
possible_length=(4, 5, 6, 7, 8, 9, 10, 11)),
fixed_line=PhoneNumberDesc(national_number_pattern='(?:35[013-9]|80[2-9]|90[89])\\d{1,8}|(?:2[2-9]|3[0-46-9]|[457]\\d|8[13-9]|9[2-579])\\d{2,9}',
example_number='27123456', possible_length=(4, 5, 6, 7, 8, 9, 10, 11)),
-
mobile=PhoneNumberDesc(national_number_pattern='6(?:[269][18]|5[1568]|7[189]|81)\\d{6}',
example_number='628123456', possible_length=(9,)),
+
mobile=PhoneNumberDesc(national_number_pattern='6(?:[26][18]|5[1568]|7[189]|81|9[128])\\d{6}',
example_number='628123456', possible_length=(9,)),
toll_free=PhoneNumberDesc(national_number_pattern='800\\d{5}',
example_number='80012345', possible_length=(8,)),
premium_rate=PhoneNumberDesc(national_number_pattern='90[015]\\d{5}',
example_number='90012345', possible_length=(8,)),
shared_cost=PhoneNumberDesc(national_number_pattern='801\\d{5}',
example_number='80112345', possible_length=(8,)),
@@ -13,10 +13,10 @@
number_format=[NumberFormat(pattern='(\\d{2})(\\d{3})', format='\\1 \\2',
leading_digits_pattern=['2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])'],
domestic_carrier_code_formatting_rule='$CC \\1'),
NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{2})', format='\\1 \\2 \\3',
leading_digits_pattern=['2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])'],
domestic_carrier_code_formatting_rule='$CC \\1'),
NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{3})', format='\\1 \\2 \\3',
leading_digits_pattern=['20[2-689]'],
domestic_carrier_code_formatting_rule='$CC \\1'),
- NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})', format='\\1
\\2 \\3 \\4', leading_digits_pattern=['2(?:[0367]|4[3-8])'],
domestic_carrier_code_formatting_rule='$CC \\1'),
+ NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})', format='\\1
\\2 \\3 \\4', leading_digits_pattern=['20'],
domestic_carrier_code_formatting_rule='$CC \\1'),
+ NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{2})(\\d{1,5})', format='\\1
\\2 \\3 \\4',
leading_digits_pattern=['[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]'],
domestic_carrier_code_formatting_rule='$CC \\1'),
NumberFormat(pattern='(\\d{3})(\\d{2})(\\d{3})', format='\\1 \\2 \\3',
leading_digits_pattern=['80[01]|90[015]'],
domestic_carrier_code_formatting_rule='$CC \\1'),
NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{2})(\\d{3})', format='\\1
\\2 \\3 \\4', leading_digits_pattern=['20'],
domestic_carrier_code_formatting_rule='$CC \\1'),
NumberFormat(pattern='(\\d{3})(\\d{3})(\\d{3})', format='\\1 \\2 \\3',
leading_digits_pattern=['6'], domestic_carrier_code_formatting_rule='$CC \\1'),
- NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})',
format='\\1 \\2 \\3 \\4 \\5', leading_digits_pattern=['2(?:[0367]|4[3-8])'],
domestic_carrier_code_formatting_rule='$CC \\1'),
- NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{2})(\\d{1,5})', format='\\1
\\2 \\3 \\4',
leading_digits_pattern=['[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]'],
domestic_carrier_code_formatting_rule='$CC \\1')],
+ NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})',
format='\\1 \\2 \\3 \\4 \\5', leading_digits_pattern=['20'],
domestic_carrier_code_formatting_rule='$CC \\1')],
mobile_number_portable_region=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_MA.py
new/phonenumbers-9.0.24/phonenumbers/data/region_MA.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_MA.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_MA.py 2026-02-13
12:13:23.000000000 +0100
@@ -3,7 +3,7 @@
PHONE_METADATA_MA = PhoneMetadata(id='MA', country_code=212,
international_prefix='00',
general_desc=PhoneNumberDesc(national_number_pattern='[5-8]\\d{8}',
possible_length=(9,)),
-
fixed_line=PhoneNumberDesc(national_number_pattern='5(?:(?:18|4[0679]|5[03])\\d|2(?:[0-25-79]\\d|3[1-578]|4[02-46-8]|8[0235-7])|3(?:[0-47]\\d|5[02-9]|6[02-8]|8[014-9]|9[3-9]))\\d{5}',
example_number='520123456', possible_length=(9,)),
+
fixed_line=PhoneNumberDesc(national_number_pattern='5(?:(?:18|4[0679]|5[03])\\d|2(?:[0-25-79]\\d|3[1-578]|4[02-46-8]|8[0235-9])|3(?:[0-47]\\d|5[02-9]|6[02-8]|8[014-9]|9[3-9]))\\d{5}',
example_number='520123456', possible_length=(9,)),
mobile=PhoneNumberDesc(national_number_pattern='(?:6(?:[0-79]\\d|8[0-247-9])|7(?:[016-8]\\d|2[0-8]|5[0-5]))\\d{6}',
example_number='650123456', possible_length=(9,)),
toll_free=PhoneNumberDesc(national_number_pattern='80[0-7]\\d{6}',
example_number='801234567', possible_length=(9,)),
premium_rate=PhoneNumberDesc(national_number_pattern='89\\d{7}',
example_number='891234567', possible_length=(9,)),
@@ -14,4 +14,5 @@
NumberFormat(pattern='(\\d{2})(\\d{7})', format='\\1-\\2',
leading_digits_pattern=['8(?:0[0-7]|9)'],
national_prefix_formatting_rule='0\\1'),
NumberFormat(pattern='(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})',
format='\\1 \\2 \\3 \\4 \\5', leading_digits_pattern=['[5-8]'],
national_prefix_formatting_rule='0\\1')],
main_country_for_code=True,
+ leading_digits='[5-8]',
mobile_number_portable_region=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_MU.py
new/phonenumbers-9.0.24/phonenumbers/data/region_MU.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_MU.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_MU.py 2026-02-13
12:13:23.000000000 +0100
@@ -3,7 +3,7 @@
PHONE_METADATA_MU = PhoneMetadata(id='MU', country_code=230,
international_prefix='0(?:0|[24-7]0|3[03])',
general_desc=PhoneNumberDesc(national_number_pattern='(?:[57]|8\\d\\d)\\d{7}|[2-468]\\d{6}',
possible_length=(7, 8, 10)),
-
fixed_line=PhoneNumberDesc(national_number_pattern='(?:2(?:[0346-8]\\d|1[0-8])|4(?:[013568]\\d|2[4-8]|71|90)|54(?:[3-5]\\d|71)|6\\d\\d|8(?:14|3[129]))\\d{4}',
example_number='54480123', possible_length=(7, 8)),
+
fixed_line=PhoneNumberDesc(national_number_pattern='(?:2(?:[0346-8]\\d|1[0-8])|4(?:[013568]\\d|2[0-24-8]|71|90)|54(?:[3-5]\\d|71)|6\\d\\d|8(?:14|3[129]))\\d{4}',
example_number='54480123', possible_length=(7, 8)),
mobile=PhoneNumberDesc(national_number_pattern='5(?:4(?:2[1-389]|7[1-9])|87[15-8])\\d{4}|(?:5(?:2[5-9]|4[3-689]|[57]\\d|8[0-689]|9[0-8])|7(?:0[0-7]|3[013]))\\d{5}',
example_number='52512345', possible_length=(8,)),
toll_free=PhoneNumberDesc(national_number_pattern='802\\d{7}|80[0-2]\\d{4}',
example_number='8001234', possible_length=(7, 10)),
premium_rate=PhoneNumberDesc(national_number_pattern='30\\d{5}',
example_number='3012345', possible_length=(7,)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_PL.py
new/phonenumbers-9.0.24/phonenumbers/data/region_PL.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_PL.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_PL.py 2026-02-13
12:13:23.000000000 +0100
@@ -4,7 +4,7 @@
PHONE_METADATA_PL = PhoneMetadata(id='PL', country_code=48,
international_prefix='00',
general_desc=PhoneNumberDesc(national_number_pattern='(?:6|8\\d\\d)\\d{7}|[1-9]\\d{6}(?:\\d{2})?|[26]\\d{5}',
possible_length=(6, 7, 8, 9, 10)),
fixed_line=PhoneNumberDesc(national_number_pattern='47\\d{7}|(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])(?:[02-9]\\d{6}|1(?:[0-8]\\d{5}|9\\d{3}(?:\\d{2})?))',
example_number='123456789', possible_length=(7, 9)),
-
mobile=PhoneNumberDesc(national_number_pattern='2131[89]\\d{4}|21(?:1[013-5]|2\\d|3[2-9])\\d{5}|(?:45|5[0137]|6[069]|7[2389]|88)\\d{7}',
example_number='512345678', possible_length=(9,)),
+
mobile=PhoneNumberDesc(national_number_pattern='21(?:1[013-5]|2\\d|3[1-9])\\d{5}|(?:45|5[0137]|6[069]|7[2389]|88)\\d{7}',
example_number='512345678', possible_length=(9,)),
toll_free=PhoneNumberDesc(national_number_pattern='800\\d{6,7}',
example_number='800123456', possible_length=(9, 10)),
premium_rate=PhoneNumberDesc(national_number_pattern='70[01346-8]\\d{6}',
example_number='701234567', possible_length=(9,)),
shared_cost=PhoneNumberDesc(national_number_pattern='801\\d{6}',
example_number='801234567', possible_length=(9,)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_PY.py
new/phonenumbers-9.0.24/phonenumbers/data/region_PY.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_PY.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_PY.py 2026-02-13
12:13:23.000000000 +0100
@@ -2,17 +2,17 @@
from ..phonemetadata import NumberFormat, PhoneNumberDesc, PhoneMetadata
PHONE_METADATA_PY = PhoneMetadata(id='PY', country_code=595,
international_prefix='00',
-
general_desc=PhoneNumberDesc(national_number_pattern='59\\d{4,6}|9\\d{5,10}|(?:[2-46-8]\\d|5[0-8])\\d{4,7}',
possible_length=(6, 7, 8, 9, 10, 11), possible_length_local_only=(5,)),
-
fixed_line=PhoneNumberDesc(national_number_pattern='(?:[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36])\\d{5,7}|(?:2(?:2[4-68]|[4-68]\\d|7[15]|9[1-5])|3(?:18|3[167]|4[2357]|51|[67]\\d)|4(?:3[12]|5[13]|9[1-47])|5(?:[1-4]\\d|5[02-4])|6(?:3[1-3]|44|7[1-8])|7(?:4[0-4]|5\\d|6[1-578]|75|8[0-8])|858)\\d{5,6}',
example_number='212345678', possible_length=(7, 8, 9),
possible_length_local_only=(5, 6)),
+
general_desc=PhoneNumberDesc(national_number_pattern='[36-8]\\d{5,8}|4\\d{6,8}|59\\d{6}|9\\d{5,10}|(?:2\\d|5[0-8])\\d{6,7}',
possible_length=(6, 7, 8, 9, 10, 11), possible_length_local_only=(5,)),
+
fixed_line=PhoneNumberDesc(national_number_pattern='(?:3[289]|4[246-8]|61|7[1-3]|8[1-36])\\d{5,7}|(?:2(?:[14-68]\\d|2[4-68]|7[15]|9[1-5])|3(?:18|3[167]|4[2357]|51|[67]\\d)|4(?:1\\d|3[12]|5[13]|9[1-47])|5(?:[1-4]\\d|5[02-4])|6(?:3[1-3]|44|7[1-8])|7(?:4[0-4]|5\\d|6[1-578]|75|8[0-8])|858)\\d{5,6}',
example_number='212345678', possible_length=(7, 8, 9),
possible_length_local_only=(5, 6)),
mobile=PhoneNumberDesc(national_number_pattern='9(?:51|6[129]|7[1-6]|8[1-7]|9[1-5])\\d{6}',
example_number='961456789', possible_length=(9,)),
toll_free=PhoneNumberDesc(national_number_pattern='9800\\d{5,7}',
example_number='98000123456', possible_length=(9, 10, 11)),
voip=PhoneNumberDesc(national_number_pattern='8700[0-4]\\d{4}',
example_number='870012345', possible_length=(9,)),
- uan=PhoneNumberDesc(national_number_pattern='[2-9]0\\d{4,7}',
example_number='201234567', possible_length=(6, 7, 8, 9)),
+
uan=PhoneNumberDesc(national_number_pattern='[245]0\\d{6,7}|[36-9]0\\d{4,7}',
example_number='201234567', possible_length=(6, 7, 8, 9)),
national_prefix='0',
national_prefix_for_parsing='0',
- number_format=[NumberFormat(pattern='(\\d{3})(\\d{3,6})', format='\\1
\\2', leading_digits_pattern=['[2-9]0'],
national_prefix_formatting_rule='0\\1'),
- NumberFormat(pattern='(\\d{7})', format='\\1',
leading_digits_pattern=['[15]']),
- NumberFormat(pattern='(\\d{2})(\\d{5})', format='\\1 \\2',
leading_digits_pattern=['[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]'],
national_prefix_formatting_rule='(0\\1)'),
+ number_format=[NumberFormat(pattern='(\\d{6,7})', format='\\1',
leading_digits_pattern=['[125]|4[01]']),
+ NumberFormat(pattern='(\\d{3})(\\d{3,6})', format='\\1 \\2',
leading_digits_pattern=['[2-9]0'], national_prefix_formatting_rule='0\\1'),
+ NumberFormat(pattern='(\\d{2})(\\d{5})', format='\\1 \\2',
leading_digits_pattern=['3[289]|4[246-8]|61|7[1-3]|8[1-36]'],
national_prefix_formatting_rule='(0\\1)'),
NumberFormat(pattern='(\\d{3})(\\d{4,5})', format='\\1 \\2',
leading_digits_pattern=['2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85'],
national_prefix_formatting_rule='(0\\1)'),
NumberFormat(pattern='(\\d{2})(\\d{3})(\\d{3,4})', format='\\1 \\2
\\3',
leading_digits_pattern=['2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]'],
national_prefix_formatting_rule='(0\\1)'),
NumberFormat(pattern='(\\d{2})(\\d{3})(\\d{4})', format='\\1 \\2 \\3',
leading_digits_pattern=['87']),
@@ -20,7 +20,7 @@
NumberFormat(pattern='(\\d{3})(\\d{3})(\\d{3})', format='\\1 \\2 \\3',
leading_digits_pattern=['[2-8]'], national_prefix_formatting_rule='0\\1'),
NumberFormat(pattern='(\\d{4})(\\d{3})(\\d{4})', format='\\1 \\2 \\3',
leading_digits_pattern=['9'])],
intl_number_format=[NumberFormat(pattern='(\\d{3})(\\d{3,6})', format='\\1
\\2', leading_digits_pattern=['[2-9]0']),
- NumberFormat(pattern='(\\d{2})(\\d{5})', format='\\1 \\2',
leading_digits_pattern=['[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]']),
+ NumberFormat(pattern='(\\d{2})(\\d{5})', format='\\1 \\2',
leading_digits_pattern=['3[289]|4[246-8]|61|7[1-3]|8[1-36]']),
NumberFormat(pattern='(\\d{3})(\\d{4,5})', format='\\1 \\2',
leading_digits_pattern=['2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85']),
NumberFormat(pattern='(\\d{2})(\\d{3})(\\d{3,4})', format='\\1 \\2
\\3',
leading_digits_pattern=['2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]']),
NumberFormat(pattern='(\\d{2})(\\d{3})(\\d{4})', format='\\1 \\2 \\3',
leading_digits_pattern=['87']),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_RU.py
new/phonenumbers-9.0.24/phonenumbers/data/region_RU.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_RU.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_RU.py 2026-02-13
12:13:23.000000000 +0100
@@ -3,7 +3,7 @@
PHONE_METADATA_RU = PhoneMetadata(id='RU', country_code=7,
international_prefix='810',
general_desc=PhoneNumberDesc(national_number_pattern='8\\d{13}|[347-9]\\d{9}',
possible_length=(10, 14), possible_length_local_only=(7,)),
-
fixed_line=PhoneNumberDesc(national_number_pattern='336(?:[013-9]\\d|2[013-9])\\d{5}|(?:3(?:0[12]|4[1-35-79]|5[1-3]|65|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15-7]|6[0-35-79]|7[1-37-9]))\\d{7}',
example_number='3011234567', possible_length=(10,),
possible_length_local_only=(7,)),
+
fixed_line=PhoneNumberDesc(national_number_pattern='(?:3(?:0[12]|36|4[1-35-79]|5[1-3]|65|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15-7]|6[0-35-79]|7[1-37-9]))\\d{7}',
example_number='3011234567', possible_length=(10,),
possible_length_local_only=(7,)),
mobile=PhoneNumberDesc(national_number_pattern='9\\d{9}',
example_number='9123456789', possible_length=(10,)),
toll_free=PhoneNumberDesc(national_number_pattern='8(?:0[04]|108\\d{3})\\d{7}',
example_number='8001234567', possible_length=(10, 14)),
premium_rate=PhoneNumberDesc(national_number_pattern='80[39]\\d{7}',
example_number='8091234567', possible_length=(10,)),
@@ -23,4 +23,5 @@
NumberFormat(pattern='(\\d{3})(\\d{3})(\\d{2})(\\d{2})', format='\\1
\\2-\\3-\\4', leading_digits_pattern=['[349]|8(?:[02-7]|1[1-8])']),
NumberFormat(pattern='(\\d{4})(\\d{4})(\\d{3})(\\d{3})', format='\\1
\\2 \\3 \\4', leading_digits_pattern=['8'])],
main_country_for_code=True,
+ leading_digits='[3489]',
mobile_number_portable_region=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_SA.py
new/phonenumbers-9.0.24/phonenumbers/data/region_SA.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_SA.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_SA.py 2026-02-13
12:13:23.000000000 +0100
@@ -4,7 +4,7 @@
PHONE_METADATA_SA = PhoneMetadata(id='SA', country_code=966,
international_prefix='00',
general_desc=PhoneNumberDesc(national_number_pattern='(?:[15]\\d|800|92)\\d{7}',
possible_length=(9, 10), possible_length_local_only=(7,)),
fixed_line=PhoneNumberDesc(national_number_pattern='1(?:1\\d|2[24-8]|3[35-8]|4[3-68]|6[2-5]|7[235-7])\\d{6}',
example_number='112345678', possible_length=(9,),
possible_length_local_only=(7,)),
-
mobile=PhoneNumberDesc(national_number_pattern='579[01]\\d{5}|5(?:[013-689]\\d|7[0-8])\\d{6}',
example_number='512345678', possible_length=(9,)),
+
mobile=PhoneNumberDesc(national_number_pattern='579[0-8]\\d{5}|5(?:[013-689]\\d|7[0-8])\\d{6}',
example_number='512345678', possible_length=(9,)),
toll_free=PhoneNumberDesc(national_number_pattern='800\\d{7}',
example_number='8001234567', possible_length=(10,)),
premium_rate=PhoneNumberDesc(national_number_pattern='925\\d{6}',
example_number='925012345', possible_length=(9,)),
shared_cost=PhoneNumberDesc(national_number_pattern='920\\d{6}',
example_number='920012345', possible_length=(9,)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_SG.py
new/phonenumbers-9.0.24/phonenumbers/data/region_SG.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_SG.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_SG.py 2026-02-13
12:13:23.000000000 +0100
@@ -4,7 +4,7 @@
PHONE_METADATA_SG = PhoneMetadata(id='SG', country_code=65,
international_prefix='0[0-3]\\d',
general_desc=PhoneNumberDesc(national_number_pattern='(?:(?:1\\d|8)\\d\\d|7000)\\d{7}|[3689]\\d{7}',
possible_length=(8, 10, 11)),
fixed_line=PhoneNumberDesc(national_number_pattern='662[0-24-9]\\d{4}|6(?:[0-578]\\d|6[013-57-9]|9[0-35-9])\\d{5}',
example_number='61234567', possible_length=(8,)),
-
mobile=PhoneNumberDesc(national_number_pattern='89(?:8[02-9]|9[0-5])\\d{4}|(?:8(?:0[1-9]|[1-8]\\d|9[0-7])|9[0-8]\\d)\\d{5}',
example_number='81234567', possible_length=(8,)),
+
mobile=PhoneNumberDesc(national_number_pattern='89(?:8[02-9]|9[0-6])\\d{4}|(?:8(?:0[1-9]|[1-8]\\d|9[0-7])|9[0-8]\\d)\\d{5}',
example_number='81234567', possible_length=(8,)),
toll_free=PhoneNumberDesc(national_number_pattern='(?:18|8)00\\d{7}',
example_number='18001234567', possible_length=(10, 11)),
premium_rate=PhoneNumberDesc(national_number_pattern='1900\\d{7}',
example_number='19001234567', possible_length=(11,)),
voip=PhoneNumberDesc(national_number_pattern='(?:3[12]\\d|666)\\d{5}',
example_number='31234567', possible_length=(8,)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_TT.py
new/phonenumbers-9.0.24/phonenumbers/data/region_TT.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_TT.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_TT.py 2026-02-13
12:13:23.000000000 +0100
@@ -5,7 +5,7 @@
general_desc=PhoneNumberDesc(national_number_pattern='(?:[58]\\d\\d|900)\\d{7}',
possible_length=(10,), possible_length_local_only=(7,)),
fixed_line=PhoneNumberDesc(national_number_pattern='868(?:2(?:01|1[5-9]|[23]\\d|4[0-2])|6(?:0[7-9]|1[02-8]|2[1-9]|[3-69]\\d|7[0-79])|82[124])\\d{4}',
example_number='8682211234', possible_length=(10,),
possible_length_local_only=(7,)),
mobile=PhoneNumberDesc(national_number_pattern='868(?:(?:2[5-9]|3\\d)\\d|4(?:3[0-6]|[6-9]\\d)|6(?:20|78|8\\d)|7(?:0[1-9]|1[02-9]|[2-9]\\d))\\d{4}',
example_number='8682911234', possible_length=(10,),
possible_length_local_only=(7,)),
-
toll_free=PhoneNumberDesc(national_number_pattern='8(?:00|33|44|55|66|77|88)[2-9]\\d{6}',
example_number='8002345678', possible_length=(10,)),
+
toll_free=PhoneNumberDesc(national_number_pattern='868800\\d{4}|8(?:00|33|44|55|66|77|88)[2-9]\\d{6}',
example_number='8002345678', possible_length=(10,)),
premium_rate=PhoneNumberDesc(national_number_pattern='900[2-9]\\d{6}',
example_number='9002345678', possible_length=(10,)),
personal_number=PhoneNumberDesc(national_number_pattern='52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\d{6}',
example_number='5002345678', possible_length=(10,)),
voicemail=PhoneNumberDesc(national_number_pattern='868619\\d{4}',
example_number='8686191234', possible_length=(10,),
possible_length_local_only=(7,)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_TZ.py
new/phonenumbers-9.0.24/phonenumbers/data/region_TZ.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_TZ.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_TZ.py 2026-02-13
12:13:23.000000000 +0100
@@ -4,7 +4,7 @@
PHONE_METADATA_TZ = PhoneMetadata(id='TZ', country_code=255,
international_prefix='00[056]',
general_desc=PhoneNumberDesc(national_number_pattern='(?:[25-8]\\d|41|90)\\d{7}',
possible_length=(9,)),
fixed_line=PhoneNumberDesc(national_number_pattern='2[2-8]\\d{7}',
example_number='222345678', possible_length=(9,)),
-
mobile=PhoneNumberDesc(national_number_pattern='(?:6[1-35-9]|7[13-9])\\d{7}',
example_number='621234567', possible_length=(9,)),
+
mobile=PhoneNumberDesc(national_number_pattern='(?:6[1-35-9]|7[013-9])\\d{7}',
example_number='621234567', possible_length=(9,)),
toll_free=PhoneNumberDesc(national_number_pattern='80[08]\\d{6}',
example_number='800123456', possible_length=(9,)),
premium_rate=PhoneNumberDesc(national_number_pattern='90\\d{7}',
example_number='900123456', possible_length=(9,)),
shared_cost=PhoneNumberDesc(national_number_pattern='8(?:40|6[01])\\d{6}',
example_number='840123456', possible_length=(9,)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/data/region_US.py
new/phonenumbers-9.0.24/phonenumbers/data/region_US.py
--- old/phonenumbers-9.0.22/phonenumbers/data/region_US.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/data/region_US.py 2026-02-13
12:13:23.000000000 +0100
@@ -3,8 +3,8 @@
PHONE_METADATA_US = PhoneMetadata(id='US', country_code=1,
international_prefix='011',
general_desc=PhoneNumberDesc(national_number_pattern='[2-9]\\d{9}|3\\d{6}',
possible_length=(10,), possible_length_local_only=(7,)),
-
fixed_line=PhoneNumberDesc(national_number_pattern='(?:2742|(?:472|983)[2-47-9])\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-3]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-247]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\d{6}',
example_number='2015550123', possible_length=(10,),
possible_length_local_only=(7,)),
-
mobile=PhoneNumberDesc(national_number_pattern='(?:2742|(?:472|983)[2-47-9])\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-3]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-247]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\d{6}',
example_number='2015550123', possible_length=(10,),
possible_length_local_only=(7,)),
+
fixed_line=PhoneNumberDesc(national_number_pattern='(?:274[27]|(?:472|983)[2-47-9])\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-3]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-247]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\d{6}',
example_number='2015550123', possible_length=(10,),
possible_length_local_only=(7,)),
+
mobile=PhoneNumberDesc(national_number_pattern='(?:274[27]|(?:472|983)[2-47-9])\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-3]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-247]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\d{6}',
example_number='2015550123', possible_length=(10,),
possible_length_local_only=(7,)),
toll_free=PhoneNumberDesc(national_number_pattern='8(?:00|33|44|55|66|77|88)[2-9]\\d{6}',
example_number='8002345678', possible_length=(10,)),
premium_rate=PhoneNumberDesc(national_number_pattern='900[2-9]\\d{6}',
example_number='9002345678', possible_length=(10,)),
personal_number=PhoneNumberDesc(national_number_pattern='52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\d{6}',
example_number='5002345678', possible_length=(10,)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/geodata/data1.py
new/phonenumbers-9.0.24/phonenumbers/geodata/data1.py
--- old/phonenumbers-9.0.22/phonenumbers/geodata/data1.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/geodata/data1.py 2026-02-13
12:13:23.000000000 +0100
@@ -1191,7 +1191,7 @@
'1435896':{'en': 'Richfield, UT'},
'1435946':{'en': 'Garden City, UT'},
'1435986':{'en': 'St. George, UT'},
- '1437':{'en': 'Toronto'},
+ '1437':{'en': 'Toronto, ON'},
'1438':{'en': 'Quebec'},
'1438380':{'en': 'Montreal, QC'},
'1440':{'en': 'Ohio'},
@@ -1332,7 +1332,7 @@
'1443944':{'en': 'Salisbury, MD'},
'1443949':{'en': 'Annapolis, MD'},
'1443977':{'en': 'Baltimore, MD'},
- '1445':{'en': 'Philadelphia'},
+ '1445':{'en': 'Philadelphia, PA'},
'1447':{'en': 'Illinois'},
'1448':{'en': 'Florida'},
'1450':{'en': 'Quebec'},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/geodata/data14.py
new/phonenumbers-9.0.24/phonenumbers/geodata/data14.py
--- old/phonenumbers-9.0.22/phonenumbers/geodata/data14.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/geodata/data14.py 2026-02-13
12:13:23.000000000 +0100
@@ -4046,7 +4046,7 @@
'6904':{'en': 'Nakunonu Atoll'},
'7301':{'en': 'Republic of Buryatia', 'ru':
u('\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430
\u0411\u0443\u0440\u044f\u0442\u0438\u044f')},
'7302':{'en': 'Chita', 'ru':
u('\u0417\u0430\u0431\u0430\u0439\u043a\u0430\u043b\u044c\u0441\u043a\u0438\u0439
\u043a\u0440\u0430\u0439')},
- '733622':{'en': 'Baikonur', 'ru':
u('\u0411\u0430\u0439\u043a\u043e\u043d\u044b\u0440')},
+ '733':{'en': 'Baikonur', 'ru':
u('\u0411\u0430\u0439\u043a\u043e\u043d\u044b\u0440')},
'7341':{'en': 'Udmurtian Republic', 'ru':
u('\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430
\u0423\u0434\u043c\u0443\u0440\u0442\u0441\u043a\u0430\u044f')},
'7342':{'en': 'Perm', 'ru':
u('\u041f\u0435\u0440\u043c\u0441\u043a\u0438\u0439 \u043a\u0440\u0430\u0439')},
'7343':{'en': 'Ekaterinburg', 'ru':
u('\u0421\u0432\u0435\u0440\u0434\u043b\u043e\u0432\u0441\u043a\u0430\u044f
\u043e\u0431\u043b')},
@@ -4348,11 +4348,11 @@
'772642':{'en': 'Moiynkum', 'ru':
u('\u041c\u043e\u0439\u044b\u043d\u043a\u0443\u043c\u0441\u043a\u0438\u0439
\u0440-\u043d')},
'772643':{'en': 'Shu', 'ru': u('\u0428\u0443\u0441\u043a\u0438\u0439
\u0440-\u043d')},
'772644':{'en': 'Karatau', 'ru':
u('\u0422\u0430\u043b\u0430\u0441\u0441\u043a\u0438\u0439 \u0440-\u043d')},
- '77272':{'en': 'Almaty', 'ru':
u('\u0410\u043b\u043c\u0430-\u0410\u0442\u0430')},
+ '77272':{'en': 'Almaty', 'ru': u('\u0410\u043b\u043c\u0430\u0442\u044b')},
'772725':{'en': 'Otegen Batyra', 'ru':
u('\u041e\u0442\u0435\u0433\u0435\u043d-\u0411\u0430\u0442\u044b\u0440')},
'77272956':{'en': 'Talgar', 'ru': u('\u0422\u0430\u043b\u0433\u0430\u0440')},
'77272983':{'en': 'Kaskelen', 'ru':
u('\u041a\u0430\u0441\u043a\u0435\u043b\u0435\u043d')},
- '77273':{'en': 'Almaty', 'ru':
u('\u0410\u043b\u043c\u0430-\u0410\u0442\u0430')},
+ '77273':{'en': 'Almaty', 'ru': u('\u0410\u043b\u043c\u0430\u0442\u044b')},
'77274':{'en': 'Karassaisky District', 'ru':
u('\u041a\u0430\u0440\u0430\u0441\u0430\u0439\u0441\u043a\u0438\u0439
\u0440-\u043d')},
'772752':{'en': 'Otegen Batyra', 'ru':
u('\u0418\u043b\u0438\u0439\u0441\u043a\u0438\u0439 \u0440-\u043d')},
'772757':{'en': 'Akshi', 'ru': u('\u0410\u043a\u0448\u0438\u0439')},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/phonenumbers-9.0.22/phonenumbers/phonenumbermatcher.py
new/phonenumbers-9.0.24/phonenumbers/phonenumbermatcher.py
--- old/phonenumbers-9.0.22/phonenumbers/phonenumbermatcher.py 2024-04-24
07:28:29.000000000 +0200
+++ new/phonenumbers-9.0.24/phonenumbers/phonenumbermatcher.py 2026-01-30
07:28:55.000000000 +0100
@@ -456,7 +456,8 @@
_DONE = 2
def __init__(self, text, region,
- leniency=Leniency.VALID, max_tries=65535):
+ leniency=Leniency.VALID, max_tries=65535,
+ min_candidate_length=1):
"""Creates a new instance.
Arguments:
@@ -471,6 +472,9 @@
max_tries -- The maximum number of invalid numbers to try before
giving up on the text. This is to cover degenerate cases where
the text has a lot of false positives in it. Must be >= 0.
+ min_candidate_length -- The minimum length of a candidate phone number.
+ Can be used to quickly skip candidates that are too short to be
valid,
+ depending on your use-case needs.
"""
if leniency is None:
raise ValueError("Need a leniency value")
@@ -487,6 +491,8 @@
self.leniency = leniency
# The maximum number of retries after matching an invalid number.
self._max_tries = int(max_tries)
+ # The minimum length of a candidate phone number.
+ self._min_candidate_length = int(min_candidate_length)
# The iteration tristate.
self._state = PhoneNumberMatcher._NOT_READY
# The last successful match, None unless in state _READY
@@ -513,13 +519,18 @@
# 123 45 67 / 68).
candidate =
self._trim_after_first_match(_SECOND_NUMBER_START_PATTERN,
candidate)
+ candidate_len = len(candidate)
+
+ # UPSTREAM DIVERGENCE: The min_candidate_length is Python-specific
+ # feature, not present in the upstream Java version.
+ if candidate_len >= self._min_candidate_length:
+ match = self._extract_match(candidate, start)
+ if match is not None:
+ return match
+ self._max_tries -= 1
- match = self._extract_match(candidate, start)
- if match is not None:
- return match
# Move along
- index = start + len(candidate)
- self._max_tries -= 1
+ index = start + candidate_len
match = _PATTERN.search(self.text, index)
return None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/phonenumbers-9.0.22/phonenumbers/phonenumbermatcher.pyi
new/phonenumbers-9.0.24/phonenumbers/phonenumbermatcher.pyi
--- old/phonenumbers-9.0.22/phonenumbers/phonenumbermatcher.pyi 2024-04-24
07:28:29.000000000 +0200
+++ new/phonenumbers-9.0.24/phonenumbers/phonenumbermatcher.pyi 2026-01-30
07:28:55.000000000 +0100
@@ -56,10 +56,11 @@
preferred_region: str | None
leniency: int
_max_tries: int
+ _min_candidate_length: int
_state: int
_last_match: PhoneNumberMatch | None
_search_index: int
- def __init__(self, text: str | None, region: str | None, leniency: int =
..., max_tries: int = ...) -> None: ...
+ def __init__(self, text: str | None, region: str | None, leniency: int =
..., max_tries: int = ..., min_candidate_length: int = ...) -> None: ...
def _find(self, index: int) -> PhoneNumberMatch | None: ...
def _trim_after_first_match(self, pattern: Pattern[str], candidate: str)
-> str: ...
@classmethod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/phonenumbers-9.0.22/phonenumbers/shortdata/region_PY.py
new/phonenumbers-9.0.24/phonenumbers/shortdata/region_PY.py
--- old/phonenumbers-9.0.22/phonenumbers/shortdata/region_PY.py 2026-01-16
07:22:22.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/shortdata/region_PY.py 2026-02-13
12:13:23.000000000 +0100
@@ -2,10 +2,10 @@
from ..phonemetadata import NumberFormat, PhoneNumberDesc, PhoneMetadata
PHONE_METADATA_PY = PhoneMetadata(id='PY', country_code=None,
international_prefix=None,
-
general_desc=PhoneNumberDesc(national_number_pattern='[159]\\d\\d(?:\\d{4})?',
possible_length=(3, 7)),
+
general_desc=PhoneNumberDesc(national_number_pattern='[12459]\\d\\d(?:\\d{3,4})?',
possible_length=(3, 6, 7)),
toll_free=PhoneNumberDesc(national_number_pattern='128|911',
example_number='128', possible_length=(3,)),
emergency=PhoneNumberDesc(national_number_pattern='128|911',
example_number='128', possible_length=(3,)),
-
short_code=PhoneNumberDesc(national_number_pattern='(?:1[01]|51)\\d{5}|911|1[1-9]\\d',
example_number='110', possible_length=(3, 7)),
-
carrier_specific=PhoneNumberDesc(national_number_pattern='(?:1[01]|51)\\d{5}',
example_number='1000000', possible_length=(7,)),
- sms_services=PhoneNumberDesc(national_number_pattern='(?:1[01]|51)\\d{5}',
example_number='1000000', possible_length=(7,)),
+
short_code=PhoneNumberDesc(national_number_pattern='[1245][01]\\d{5}|(?:1[1-9]|[245]0\\d{3})\\d|911',
example_number='110', possible_length=(3, 6, 7)),
+
carrier_specific=PhoneNumberDesc(national_number_pattern='[1245][01]\\d{5}|[245]0\\d{4}',
example_number='200000', possible_length=(6, 7)),
+
sms_services=PhoneNumberDesc(national_number_pattern='[1245][01]\\d{5}|[245]0\\d{4}',
example_number='200000', possible_length=(6, 7)),
short_data=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers/tzdata/data0.py
new/phonenumbers-9.0.24/phonenumbers/tzdata/data0.py
--- old/phonenumbers-9.0.22/phonenumbers/tzdata/data0.py 2026-01-16
07:22:23.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers/tzdata/data0.py 2026-02-13
12:13:24.000000000 +0100
@@ -3173,8 +3173,7 @@
'7':('Asia/Almaty', 'Asia/Anadyr', 'Asia/Aqtobe', 'Asia/Irkutsk',
'Asia/Kamchatka', 'Asia/Krasnoyarsk', 'Asia/Magadan', 'Asia/Novosibirsk',
'Asia/Omsk', 'Asia/Sakhalin', 'Asia/Vladivostok', 'Asia/Yakutsk',
'Asia/Yekaterinburg', 'Europe/Bucharest', 'Europe/Moscow', 'Europe/Samara'),
'7301':('Asia/Irkutsk',),
'7302':('Asia/Yakutsk',),
- '7336':('Asia/Yekaterinburg',),
- '733622':('Asia/Almaty',),
+ '733':('Asia/Yekaterinburg',),
'734':('Asia/Yekaterinburg',),
'7341':('Europe/Samara',),
'735':('Asia/Yekaterinburg',),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/phonenumbers.egg-info/PKG-INFO
new/phonenumbers-9.0.24/phonenumbers.egg-info/PKG-INFO
--- old/phonenumbers-9.0.22/phonenumbers.egg-info/PKG-INFO 2026-01-16
07:30:39.000000000 +0100
+++ new/phonenumbers-9.0.24/phonenumbers.egg-info/PKG-INFO 2026-02-13
12:28:42.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: phonenumbers
-Version: 9.0.22
+Version: 9.0.24
Summary: Python version of Google's common library for parsing, formatting,
storing and validating international phone numbers.
Author-email: David Drysdale <[email protected]>
License-Expression: Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/phonenumbers-9.0.22/tests/phonenumbermatchertest.py
new/phonenumbers-9.0.24/tests/phonenumbermatchertest.py
--- old/phonenumbers-9.0.22/tests/phonenumbermatchertest.py 2024-04-24
07:28:29.000000000 +0200
+++ new/phonenumbers-9.0.24/tests/phonenumbermatchertest.py 2026-01-30
07:28:55.000000000 +0100
@@ -988,3 +988,25 @@
num_format = NumberFormat(pattern="(\\d{3})(\\d{3})(\\d{4})",
format="\\1-\\2-\\3")
self.assertEqual(["650", "253", "0000"],
_get_national_number_groups(us_number, num_format))
+
+ def testMinCandidateLengthFiltersShortNumbers(self):
+ # Python-specific test: min_candidate_length parameter
+ text = "Call +1800-123-4567 or 415-666-7777 for help"
+ # With min_candidate_length=13, the short candidate should be skipped
+ matcher = PhoneNumberMatcher(text, "US", Leniency.POSSIBLE, 65535,
min_candidate_length=13)
+ match = matcher.next() if matcher.has_next() else None
+ self.assertIsNotNone(match)
+ self.assertEqual("+1800-123-4567", match.raw_string)
+ # Should be no more matches
+ self.assertFalse(matcher.has_next())
+
+ def testMinCandidateLengthDoesNotConsumeMaxTries(self):
+ # Python-specific test: skipped short candidates don't consume
max_tries
+ # Text with 5 short candidates followed by one valid number
+ text = "Try 123, 456, 789, 012, 345, then call 415-666-7777"
+ # With max_tries=1, if short candidates consumed tries, we'd fail to
find the valid number
+ # But with min_candidate_length=10, short candidates are skipped
without consuming tries
+ matcher = PhoneNumberMatcher(text, "US", Leniency.VALID, max_tries=1,
min_candidate_length=10)
+ match = matcher.next() if matcher.has_next() else None
+ self.assertIsNotNone(match)
+ self.assertEqual("415-666-7777", match.raw_string)