PHP:电话号码解析

时间:2012-06-11 13:15:20

标签: php validation parsing

我正在寻找一些方法来验证PHP中的电话号码,这些电话号码可以以任何存在的格式输入。如果它有帮助,我可以将问题的域名限制为美国电话号码(或国际号码 - 一个或另一个,但不是两个)。

我曾尝试为filter_var()寻找自定义过滤器,相当于strtotime()的电话号码,或者只是普通的解析库,但运气不佳。

如果需要,我可以设计一个自定义解决方案,但我不愿意,如果一个已经存在,因为A)我的肯定不会那么健壮,而B)我不喜欢重新发明轮子。

3 个答案:

答案 0 :(得分:1)

使用正则表达式,以下内容将匹配诸如3334445555,333.444.5555,333-444-5555,333 444 5555,(333)444 5555及其所有组合之类的内容。 然后用(333)444-5555替换所有那些

preg_replace('\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})', '(\1) \2-\3', $text);

答案 1 :(得分:0)

'解析'电话号码不是本地PHP的事情。

您需要自己指定“有效”的电话号码 - 这应该通过根据指定的格式或正则表达式验证输入来完成。

PHP无法知道“有效的电话号码”是什么。

答案 2 :(得分:0)

我不知道所有美国电话号码格式,但我猜这是一个可以扩展的一般想法:

function validate_phone($phone) {
  // replace everything except numbers
  $phone = preg_replace('~[^\dx]~', '', $phone);

  return preg_match('~^\d{11}(x\d{4})?$~', $phone);
}


// $phone = 12345678901;
$phone = '1-234-567-8901x1234';
$valid = filter_var($phone, FILTER_CALLBACK, array(
  'options' => 'validate_phone'
));

if ($valid) {
  echo "It's valid!";
};

此代码支持或十一位数字(内部带有破折号,空格,点)和带有x2134后缀的扩展格式。