Skip to content

Commit 7b5343b

Browse files
committed
Merge pull request cakephp#48 from cdburgess/phone-validation-update
According to NANPA, there are area codes and exchanges that are invalid ...
2 parents a148b33 + 1c354ba commit 7b5343b

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

Test/Case/Validation/UsValidationTest.php

+22-2
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,28 @@ public function testPhone() {
4343
$this->assertFalse(UsValidation::phone('(055) 999-9999'));
4444
$this->assertFalse(UsValidation::phone('(155) 999-9999'));
4545
$this->assertFalse(UsValidation::phone('(595) 999-9999'));
46-
$this->assertFalse(UsValidation::phone('(555) 099-9999'));
47-
$this->assertFalse(UsValidation::phone('(555) 199-9999'));
46+
$this->assertFalse(UsValidation::phone('(213) 099-9999'));
47+
$this->assertFalse(UsValidation::phone('(213) 199-9999'));
48+
49+
// invalid area-codes
50+
$this->assertFalse(UsValidation::phone('1-(511)-999-9999'));
51+
$this->assertFalse(UsValidation::phone('1-(379)-999-9999'));
52+
$this->assertFalse(UsValidation::phone('1-(962)-999-9999'));
53+
$this->assertFalse(UsValidation::phone('1-(295)-999-9999'));
54+
$this->assertFalse(UsValidation::phone('1-(555)-999-9999'));
55+
56+
// invalid exhange
57+
$this->assertFalse(UsValidation::phone('1-(222)-511-9999'));
58+
59+
// invalid phone number
60+
$this->assertFalse(UsValidation::phone('1-(222)-555-0199'));
61+
$this->assertFalse(UsValidation::phone('1-(222)-555-0122'));
62+
63+
// valid phone numbers
64+
$this->assertTrue(UsValidation::phone('1-(369)-333-4444'));
65+
$this->assertTrue(UsValidation::phone('1-(973)-333-4444'));
66+
$this->assertTrue(UsValidation::phone('1-(313)-555-9999'));
67+
$this->assertTrue(UsValidation::phone('1-(222)-555-0299'));
4868

4969
$this->assertTrue(UsValidation::phone('1 (222) 333 4444'));
5070
$this->assertTrue(UsValidation::phone('+1 (222) 333 4444'));

Validation/UsValidation.php

+7-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,13 @@ class UsValidation {
3131
* @return boolean
3232
*/
3333
public static function phone($check) {
34-
$pattern = '/^(?:\+?1)?[-. ]?\\(?[2-9][0-8][0-9]\\)?[-. ]?[2-9][0-9]{2}[-. ]?[0-9]{4}$/';
34+
$pattern = '/^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|3[02-689][0-9]|9[02-57-9][0-9]|[246-8][02-46-8][02-46-9])\s*\)';
35+
$pattern .= '|(55[0-46-9]|5[0-46-9][5]|[0-46-9]55|[2-9]1[02-9]|[2-9][02-8]1|[2-46-9][02-46-8][02-46-9]))\s*(?:[.-]\s*)?)';
36+
$pattern .= '(?!(555(?:\s*(?:[.|\-|\s]\s*))(01([0-9][0-9])|1212)))';
37+
$pattern .= '(?!(555(01([0-9][0-9])|1212)))';
38+
$pattern .= '([2-9]1[02-9]|[2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)';
39+
$pattern .= '?([0-9]{4})';
40+
$pattern .= '(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$/';
3541
return (bool)preg_match($pattern, $check);
3642
}
3743

0 commit comments

Comments
 (0)