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

时间:2016-12-21 17:08:21

标签: php regex

以下是我验证电话号码的代码。问题是电话号码无效,它仍然返回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 

1 个答案:

答案 0 :(得分:1)

这里的问题是你的字符串可以匹配中间的任何东西。因此+17026220277匹配,因为7026220277位于最后

尝试这种模式

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

^表示字符串的开头,$表示结束