Skip to content

Commit

Permalink
Fix mobile phone number pattern for France
Browse files Browse the repository at this point in the history
  • Loading branch information
ker0x committed Feb 5, 2024
1 parent 2114cc6 commit 538dce0
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 13 deletions.
44 changes: 33 additions & 11 deletions src/Provider/fr_FR/PhoneNumber.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 ## ## ## ##',
Expand All @@ -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 ## ## ## ##',
Expand All @@ -33,7 +33,7 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber
'03########',
'04########',
'05########',
'06########',
'06{{phoneNumber06}}',
'07{{phoneNumber07}}',
'08{{phoneNumber08}}',
'09########',
Expand All @@ -43,7 +43,7 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber
'03 ## ## ## ##',
'04 ## ## ## ##',
'05 ## ## ## ##',
'06 ## ## ## ##',
'06 {{phoneNumber06WithSeparator}}',
'07 {{phoneNumber07WithSeparator}}',
'08 {{phoneNumber08WithSeparator}}',
'09 ## ## ## ##',
Expand All @@ -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}}',
];

Expand All @@ -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();
Expand All @@ -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;
Expand Down
16 changes: 14 additions & 2 deletions test/Provider/fr_FR/PhoneNumberTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 538dce0

Please sign in to comment.