From f7ac50712e417f008402c8fc889c964e75eecfe9 Mon Sep 17 00:00:00 2001 From: Catlike14 Date: Sat, 22 Feb 2025 10:07:46 +0100 Subject: [PATCH] Improved italian phone numbers (#950) --- CHANGELOG.md | 3 +- src/Faker/Provider/it_IT/PhoneNumber.php | 41 ++++++++++++++------ src/Faker/Provider/it_IT/PhoneNumberTest.php | 30 ++++++++++++++ 3 files changed, 61 insertions(+), 13 deletions(-) create mode 100644 src/Faker/Provider/it_IT/PhoneNumberTest.php diff --git a/CHANGELOG.md b/CHANGELOG.md index a8e08cbd39..0f99eb8427 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,8 @@ - Removed domain `gmail.com.au` from `Provider\en_AU\Internet` (#886) - Refreshed ISO currencies (#919) -- +- Improved italian phone number formats + ## [2024-11-09, v1.24.0](https://github.com/FakerPHP/Faker/compare/v1.23.1..v1.24.0) - Fix internal deprecations in Doctrine's populator by @gnutix in (#889) diff --git a/src/Faker/Provider/it_IT/PhoneNumber.php b/src/Faker/Provider/it_IT/PhoneNumber.php index b9727a66c9..dc3d769beb 100644 --- a/src/Faker/Provider/it_IT/PhoneNumber.php +++ b/src/Faker/Provider/it_IT/PhoneNumber.php @@ -4,18 +4,35 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber { + /** + * @see https://en.wikipedia.org/wiki/Telephone_numbers_in_Italy + */ protected static $formats = [ - '+## ### ## ## ####', - '+## ## #######', - '+## ## ########', - '+## ### #######', - '+## ### ########', - '+## #### #######', - '+## #### ########', - // According to http://it.wikipedia.org/wiki/Prefisso_telefonico#Elenco_degli_indicativi_in_Italia.2C_a_San_Marino_e_nel_Vaticano - '0## ### ####', - '+39 0## ### ###', - '3## ### ###', - '+39 3## ### ###', + // Landline numbers + '0%# ### ###', + '0%# ### ####', + '02 #### ###', // Milan + '02 #### ####', + '06 #### ###', // Rome + '06 #### ####', + + // Mobile numbers + '3%# ### ####', + + // International formats + '+39 0%# ### ###', + '+39 0%# ### ####', + '+39 02 #### ###', + '+39 02 #### ####', + '+39 06 #### ###', + '+39 06 #### ####', + '+39 3%# ### ####', + ]; + + protected static $e164Formats = [ + '+390%#######', + '+390%########', + '+393%#######', + '+393%########', ]; } diff --git a/src/Faker/Provider/it_IT/PhoneNumberTest.php b/src/Faker/Provider/it_IT/PhoneNumberTest.php new file mode 100644 index 0000000000..0b4e9149a2 --- /dev/null +++ b/src/Faker/Provider/it_IT/PhoneNumberTest.php @@ -0,0 +1,30 @@ +faker->phoneNumber(); + self::assertMatchesRegularExpression('/^(((\+39 )?((3[1-9]\d)|(0[1-9]\d{0,1})) \d{3,4} \d{3,4})|((\+39)?(0|3)[1-9]\d{7,9}))$/', $number); + } + } + + public function testE164PhoneNumberFormat(): void + { + for ($i = 0; $i < 10; ++$i) { + $number = $this->faker->e164PhoneNumber(); + self::assertMatchesRegularExpression('/^\+39(0|3)[1-9]\d{7,9}$/', $number); + } + } + + protected function getProviders(): iterable + { + yield new PhoneNumber($this->faker); + } +}