1

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

$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

4 回答 4

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)不需要。

于 2010-11-06T17:30:15.453 回答
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 更具限制性(例如,仅删除括号、空格和破折号)。

于 2010-11-06T17:51:47.330 回答
0

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

于 2013-03-04T00:30:06.550 回答
-2

在此处查找具有验证电话号码功能的代码项目。

于 2018-07-18T23:53:31.643 回答