我正在寻找一些方法来验证PHP中的电话号码,这些电话号码可以以任何存在的各种格式输入。如果有帮助,我可以将问题的域名限制为美国的电话号码(或国际号码 - 一个或另一个,但不能同时为两个)。PHP:电话号码解析
我试过寻找自定义过滤器filter_var()
,相当于strtotime()
的电话号码,或只是普通的香草解析库,但没有多少运气。
如果需要,我可以设计定制的解决方案,但我不希望如果已经存在,是因为A)我的肯定不会是那样强劲,和B)我不喜欢重新发明轮子。
我正在寻找一些方法来验证PHP中的电话号码,这些电话号码可以以任何存在的各种格式输入。如果有帮助,我可以将问题的域名限制为美国的电话号码(或国际号码 - 一个或另一个,但不能同时为两个)。PHP:电话号码解析
我试过寻找自定义过滤器filter_var()
,相当于strtotime()
的电话号码,或只是普通的香草解析库,但没有多少运气。
如果需要,我可以设计定制的解决方案,但我不希望如果已经存在,是因为A)我的肯定不会是那样强劲,和B)我不喜欢重新发明轮子。
使用正则表达式,以下内容将匹配3334445555,333.444.5555,333-444-5555,3334444555,(333)4445555及其所有组合。 然后替换所有那些(333)444-5555
preg_replace('\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})', '(\1) \2-\3', $text);
我还应该指出,如果您不确定数字是否有效并且想返回错误(如果上述返回false),则可以将上述内容放在if语句中。 – Exupery
“解析”的电话号码是不是一个原生PHP的事情。
您需要指定自己什么是'有效'的电话号码簿 - 这应该通过验证对指定格式或正则表达式的输入来完成。
PHP无法知道'有效数字'是什么。
关于日期/时间也可以这么说,但尽管在国内和国际上有不同的可能格式的数量可笑,但是“strtotime()”和等价物本身就存在。它使用“最佳猜测”解析算法,这就是我正在寻找的一切。 – FtDRbwLXw6
@drrcknlsn我不同意; [文档](http://php.net/manual/en/datetime.formats.php)清楚地说明了'strtotime()'认为有效和可分析的输入。 – Repox
如果PHP能够根据一组明确定义的规则知道有效的日期/时间是什么,那么绝对没有理由不知道什么是有效的电话号码。事实上,它本身不可能是因为没有人花时间去实现它。不是因为它无法完成。这就是我所说的。 – FtDRbwLXw6
我不知道所有美国的电话号码格式,但我猜这是你可以扩展一个总体思路:
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后缀。
使用正则表达式 – Quantastical