向正则表达式添加否定语句

时间:2015-02-09 00:30:22

标签: php regex tel

我正在尝试检查使用正则表达式时是否存在这样的电话号码。

  

(001)33992292

所以,我用了

if(preg_match("/[0-9\(\)]+/", $row)){
     //is phone number
  }

但是,问题在于,包含数字的字符串也会被传递,例如foo134@yahoo.com,那么我如何评估电话号码并排除@字符串在一起?

3 个答案:

答案 0 :(得分:1)

<强> UDPATED /^(\(\d+\))*\s?(\d+\s*)+$/

你错过了开始字符串^符号和结束字符串$符号,还有你的正则表达式错误了 因为5545()4535也会通过比赛

答案 1 :(得分:1)

您需要在正则表达式中使用anchors,正确的语法是:

if(preg_match('~^\(\d{3}\) *\d{8}$~', $row)) { ... }

答案 2 :(得分:1)

电话号码因人们出错而臭名昭着 - 人们指的是程序员。

例如,这些都是&#34;常见的&#34;写电话号码的方法:

(001) 33992292
001 33992292
00133992292
001 3399 2292
(001) 3399-2292

更安全的方法是删除所有不是数字并查看长度的内容:

$phonenumber = "(001) 33992292";
$phonenumber = preg_replace("/[^0-9,.]/", "", $phonenumber );

if (strlen($phonenumber) == 11) {
    // do thing
}