Skip to content

Commit 1450373

Browse files
authored
Merge pull request #158 from 2ndGAB/issue-154
Improve French phone number validation (#154)
2 parents 1d3f28c + 6a57849 commit 1450373

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

src/Validation/FrValidation.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class FrValidation extends LocalizedValidation
2929
*/
3030
public static function phone($check)
3131
{
32-
$pattern = '/^0[1-9]{1}(([0-9]{8})|((\s[0-9]{2}){4})|((-[0-9]{2}){4})|((\.[0-9]{2}){4}))$/';
32+
$pattern = '/(^0|\+33)(0?[1-9]{1}|\s0?[1-9]{1}|-0?[1-9]{1}|\.0?[1-9]{1})(([0-9]{8})|((\s[0-9]{2}){4})|((-[0-9]{2}){4})|((\.[0-9]{2}){4}))$|(^0(508|596|590|594|262))(([0-9]{6})|((\s[0-9]{2}){3})|((-[0-9]{2}){3})|((\.[0-9]{2}){3}))$|(^\+(?\'intl\'508|596|590|594|262))((\k\'intl\'[0-9]{6})|(\s\k\'intl\'(\s[0-9]{2}){3})|(-\k\'intl\'(-[0-9]{2}){3})|(\.\k\'intl\'(\.[0-9]{2}){3}))$/';
3333

3434
return (bool)preg_match($pattern, $check);
3535
}

tests/TestCase/Validation/FrValidationTest.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,45 @@ public function testPhone()
4040
$this->assertFalse(FrValidation::phone('04 76 96 12 33 '));
4141
$this->assertFalse(FrValidation::phone('047696123323'));
4242
$this->assertFalse(FrValidation::phone('07 43 90 33'));
43+
44+
/*
45+
* Test cases for French metropolitan international number formats
46+
*/
47+
$this->assertTrue(FrValidation::phone('+33476961232'));
48+
$this->assertTrue(FrValidation::phone('+330476961232'));
49+
$this->assertTrue(FrValidation::phone('+33 4 76 96 12 32'));
50+
$this->assertTrue(FrValidation::phone('+33 04 76 96 12 32'));
51+
$this->assertTrue(FrValidation::phone('+33-04-76-96-12-32'));
52+
$this->assertTrue(FrValidation::phone('+33.04.76.96.12.32'));
53+
54+
$this->assertFalse(FrValidation::phone('+331476961232'));
55+
$this->assertFalse(FrValidation::phone('+33.14.76.96.12.32'));
56+
$this->assertFalse(FrValidation::phone('+33.04.76.96.12'));
57+
58+
/*
59+
* Test cases for DOM/TOM national number formats
60+
*/
61+
$this->assertTrue(FrValidation::phone('0590123456'));
62+
$this->assertTrue(FrValidation::phone('0596 12 34 56'));
63+
$this->assertTrue(FrValidation::phone('0594-12-34-56'));
64+
$this->assertTrue(FrValidation::phone('0262.12.34.56'));
65+
$this->assertTrue(FrValidation::phone('0508.12.34.56'));
66+
67+
$this->assertFalse(FrValidation::phone('0262.12.34.56.78'));
68+
$this->assertFalse(FrValidation::phone('0262-12-34-5'));
69+
70+
/*
71+
* Test cases for DOM/TOM international number formats
72+
*/
73+
$this->assertTrue(FrValidation::phone('+590590123456'));
74+
$this->assertTrue(FrValidation::phone('+596 596 12 34 56'));
75+
$this->assertTrue(FrValidation::phone('+594-594-12-34-56'));
76+
$this->assertTrue(FrValidation::phone('+262.262.12.34.56'));
77+
$this->assertTrue(FrValidation::phone('+508.508.12.34.56'));
78+
79+
$this->assertFalse(FrValidation::phone('+590123456'));
80+
$this->assertFalse(FrValidation::phone('+590 12 34 56'));
81+
$this->assertFalse(FrValidation::phone('+596 594 12 34 56'));
4382
}
4483

4584
/**

0 commit comments

Comments
 (0)