希望用/区号验证美国电话号码

时间:2010-11-06 17:26:52

标签: php validation phone-number

我正在开发一项功能来验证用户提交的美国电话号码,该号码可以用人们通常使用的任何流行数字格式提交。到目前为止,我的代码如下:

$number = '123-456-7890';

function validate_telephone_number($number) {
    $formats = array(
        '###-###-####',
        '(###)###-###',
        '(###) ###-###',
        '##########'
    );

    $number = trim(preg_replace('[0-9]', '#', $number));

    if (in_array($number, $formats)) {
        return true;
    } else {
        return false;
    }
}

首先,此代码似乎不起作用,并在所有提交的数字上返回false。我似乎无法找到我的错误。

其次,我正在寻找一种简单的方法,只允许来自一系列特定允许区号的电话号码。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

关于你的第一个问题:

preg_replace('/[0-9]/', '#', $number)

'/\d/'


对于第二个问题,这可能会对您有所帮助:

$areaCode = substr(preg_replace('/[^\d]/', '', $number),0 , 3);

这将通过丢弃所有其他字符来为您提供该号码的前3位数字。

我不熟悉美国区号格式,所以我对这个格式无法帮助你。


加成:

if (in_array($number, $formats)) {
    return true;
} else {
    return false;
}

相当于

return in_array($number, $formats);

事实上任何形式的陈述

if(<expression>){
    return true;
}
else{
    return false;
}

可以写为return (bool) <expr>;,但在这种情况下,in_array将始终返回一个布尔值,因此不需要(bool)

答案 1 :(得分:0)

您的代码不检查格式正确但数字无效 - 例如,在美国没有区号以0或1开头,因此可以检查。此外,您的格式不允许包含国家/地区代码 - 例如,将拒绝+15551234567。

如果您不关心格式,只想验证输入中的数字是否相当于有效的美国电话号码,您可以使用以下内容:

$clean_number = preg_replace("/[^0-9]/", '', $number);
$valid = preg_match("/^(\+?1)?[2-9][0-9]{9}$/", $clean_number);

当然,这也会接受“foo 5555555555 bar”作为有效数字 - 如果你想禁止它,请使preg_replace更具限制性(例如,只删除括号,空格和短划线)。

答案 2 :(得分:0)

如果您希望在不维护大量代码的情况下执行此操作,则可以查看此API以验证美国号码并提供多种格式https://www.mashape.com/parsify/format

答案 3 :(得分:-1)

here中查找具有验证电话号码功能的代码项目。