【问题标题】:looking to validate US phone number w/ area code希望验证带区号的美国电话号码
【发布时间】:2010-11-06 17:26:51
【问题描述】:

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

$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。我似乎找不到我的错误。

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

【问题讨论】:

    标签: php validation phone-number


    【解决方案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) &lt;expr&gt;;,但在这种情况下in_array 将始终返回布尔值,因此不需要(bool)

    【讨论】:

    • 太棒了。工作完美。谢谢!
    【解决方案2】:

    您的代码不会检查格式正确但无效的数字 - 例如,在美国没有以 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 更具限制性(例如,仅删除括号、空格和破折号)。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2012-05-22
          • 2010-09-15
          • 1970-01-01
          • 1970-01-01
          • 2011-09-21
          • 2011-08-16
          • 2011-03-22
          • 2011-05-22
          • 2010-11-11
          相关资源
          最近更新 更多