From 538dce06731bd0274152221b7da110f7c456bc07 Mon Sep 17 00:00:00 2001 From: Romain Monteil Date: Mon, 5 Feb 2024 15:33:42 +0100 Subject: [PATCH] Fix mobile phone number pattern for France --- src/Provider/fr_FR/PhoneNumber.php | 44 ++++++++++++++++++------- test/Provider/fr_FR/PhoneNumberTest.php | 16 +++++++-- 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/src/Provider/fr_FR/PhoneNumber.php b/src/Provider/fr_FR/PhoneNumber.php index 69c681d915..e97c4f5560 100644 --- a/src/Provider/fr_FR/PhoneNumber.php +++ b/src/Provider/fr_FR/PhoneNumber.php @@ -13,7 +13,7 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber '+33 (0)3 ## ## ## ##', '+33 (0)4 ## ## ## ##', '+33 (0)5 ## ## ## ##', - '+33 (0)6 ## ## ## ##', + '+33 (0)6 {{phoneNumber06WithSeparator}}', '+33 (0)7 {{phoneNumber07WithSeparator}}', '+33 (0)8 {{phoneNumber08WithSeparator}}', '+33 (0)9 ## ## ## ##', @@ -23,7 +23,7 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber '+33 3 ## ## ## ##', '+33 4 ## ## ## ##', '+33 5 ## ## ## ##', - '+33 6 ## ## ## ##', + '+33 6 {{phoneNumber06WithSeparator}}', '+33 7 {{phoneNumber07WithSeparator}}', '+33 8 {{phoneNumber08WithSeparator}}', '+33 9 ## ## ## ##', @@ -33,7 +33,7 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber '03########', '04########', '05########', - '06########', + '06{{phoneNumber06}}', '07{{phoneNumber07}}', '08{{phoneNumber08}}', '09########', @@ -43,7 +43,7 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber '03 ## ## ## ##', '04 ## ## ## ##', '05 ## ## ## ##', - '06 ## ## ## ##', + '06 {{phoneNumber06WithSeparator}}', '07 {{phoneNumber07WithSeparator}}', '08 {{phoneNumber08WithSeparator}}', '09 ## ## ## ##', @@ -52,13 +52,13 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber // Mobile phone numbers start by 06 and 07 // 06 is the most common prefix protected static $mobileFormats = [ - '+33 (0)6 ## ## ## ##', - '+33 6 ## ## ## ##', + '+33 (0)6 {{phoneNumber06WithSeparator}}', + '+33 6 {{phoneNumber06WithSeparator}}', '+33 (0)7 {{phoneNumber07WithSeparator}}', '+33 7 {{phoneNumber07WithSeparator}}', - '06########', + '06{{phoneNumber06}}', '07{{phoneNumber07}}', - '06 ## ## ## ##', + '06 {{phoneNumber06WithSeparator}}', '07 {{phoneNumber07WithSeparator}}', ]; @@ -73,6 +73,27 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber '+33#########', ]; + public function phoneNumber06() + { + $phoneNumber = $this->phoneNumber06WithSeparator(); + + return str_replace(' ', '', $phoneNumber); + } + + /** + * Only 0601 to 0638, 0640 to 0689, 0695 and 0698 to 0699 are acceptable prefixes with 06 + * + * @see https://www.arcep.fr/la-regulation/grands-dossiers-thematiques-transverses/la-numerotation.html#c8961 + * @see https://www.itu.int/itu-t/nnp/#/numbering-plans?country=France%C2%A0&code=33 + */ + public function phoneNumber06WithSeparator() + { + $phoneNumber = $this->generator->regexify('([0-24-8]\d|3[0-8]|9[589])'); + $phoneNumber .= $this->numerify(' ## ## ##'); + + return $phoneNumber; + } + public function phoneNumber07() { $phoneNumber = $this->phoneNumber07WithSeparator(); @@ -81,13 +102,14 @@ public function phoneNumber07() } /** - * Only 073 to 079 are acceptable prefixes with 07 + * Only 0730 to 0789 are acceptable prefixes with 07 * - * @see http://www.arcep.fr/index.php?id=8146 + * @see https://www.arcep.fr/la-regulation/grands-dossiers-thematiques-transverses/la-numerotation.html#c8961 + * @see https://www.itu.int/itu-t/nnp/#/numbering-plans?country=France%C2%A0&code=33 */ public function phoneNumber07WithSeparator() { - $phoneNumber = $this->generator->numberBetween(3, 9); + $phoneNumber = $this->generator->numberBetween(3, 8); $phoneNumber .= $this->numerify('# ## ## ##'); return $phoneNumber; diff --git a/test/Provider/fr_FR/PhoneNumberTest.php b/test/Provider/fr_FR/PhoneNumberTest.php index 46fe7f80cb..c51f95b652 100644 --- a/test/Provider/fr_FR/PhoneNumberTest.php +++ b/test/Provider/fr_FR/PhoneNumberTest.php @@ -18,16 +18,28 @@ public function testMobileNumber(): void self::assertMatchesRegularExpression('/^(\+33 |\+33 \(0\)|0)(6|7)(?:(\s{1})?\d{2}){4}$/', $mobileNumber); } + public function testMobileNumber06Format(): void + { + $mobileNumberFormat = $this->faker->phoneNumber06(); + self::assertMatchesRegularExpression('/^([0-24-8]\d|3[0-8]|9[589])(\d{2}){3}$/', $mobileNumberFormat); + } + + public function testMobileNumber06WithSeparatorFormat(): void + { + $mobileNumberFormat = $this->faker->phoneNumber06WithSeparator(); + self::assertMatchesRegularExpression('/^([0-24-8]\d|3[0-8]|9[589])( \d{2}){3}$/', $mobileNumberFormat); + } + public function testMobileNumber07Format(): void { $mobileNumberFormat = $this->faker->phoneNumber07(); - self::assertMatchesRegularExpression('/^([3-9]{1})\d(\d{2}){3}$/', $mobileNumberFormat); + self::assertMatchesRegularExpression('/^([3-8]{1})\d(\d{2}){3}$/', $mobileNumberFormat); } public function testMobileNumber07WithSeparatorFormat(): void { $mobileNumberFormat = $this->faker->phoneNumber07WithSeparator(); - self::assertMatchesRegularExpression('/^([3-9]{1})\d( \d{2}){3}$/', $mobileNumberFormat); + self::assertMatchesRegularExpression('/^([3-8]{1})\d( \d{2}){3}$/', $mobileNumberFormat); } public function testServiceNumber(): void