以下是我的代码验证电话号码。问题在于无效的电话号码,它仍然返回真实。如何解决此问题?
$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}$/';
^
表示字符串的开始, $
表示末端