我正在寻找一些方法来验证PHP中的电话号码,这些电话号码可以以任何存在的格式输入。如果它有帮助,我可以将问题的域名限制为美国电话号码(或国际号码 - 一个或另一个,但不是两个)。
我曾尝试为filter_var()
寻找自定义过滤器,相当于strtotime()
的电话号码,或者只是普通的解析库,但运气不佳。
如果需要,我可以设计一个自定义解决方案,但我不愿意,如果一个已经存在,因为A)我的肯定不会那么健壮,而B)我不喜欢重新发明轮子。
答案 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后缀的扩展格式。