对于无效的电话号码,PreG_Match返回true



以下是我的代码验证电话号码。问题在于无效的电话号码,它仍然返回真实。如何解决此问题?

$pattern = '/(?[d]{3})?s?-?[d]{3}s?-?[d]{4}/';
$str = array(
    "702 622 0277",
    "(702)622-0277",
    "702-622-0277",
    "(702) 622 0277",
    "1234", // false
    "7026220277",
    "+17026220277", // should be false
    "+17777036880277" // should be false
);
foreach($str as $each) {
    if(preg_match($pattern, $each, $matches)) {
        echo "$each is valid <br>";
    } else {
        echo "$each is invalid <br>";
    }
}

输出:

702 622 0277 is valid 
(702)622-0277 is valid 
702-622-0277 is valid 
(702) 622 0277 is valid 
1234 is invalid 
7026220277 is valid 
+17026220277 is valid 
+17777036880277 is valid 

这里的问题是您的字符串可以匹配中间的任何内容。因此,+17026220277匹配,因为7026220277

尝试此模式

$pattern = '/^(?[d]{3})?s?-?[d]{3}s?-?[d]{4}$/';

^表示字符串的开始, $表示末端

最新更新