【问题标题】:Need to re-format phone number entries in a PHP Formmail script需要在 PHP Formmail 脚本中重新格式化电话号码条目
【发布时间】:2008-12-20 21:47:45
【问题描述】:

我在客户网站的联系表单中有一个简单的“电话号码”文本字段。 formmail 脚本返回用户在该字段中键入的任何内容。例如,他们会收到“000-000-0000”、“0000000000”、(000) 000-000 等。客户希望收到这种形式的所有电话号码:000-000-0000。有人可以提供一个简单的脚本来删除所有无关的标点符号,然后重新插入破折号吗?

我不是程序员,只是一名设计师,因此我无法提供任何现有代码供任何人评估,但我很乐意将 formmail 脚本通过电子邮件发送给任何可以提供帮助的人。

谢谢。 A. 格兰特

【问题讨论】:

    标签: php regex


    【解决方案1】:
    <?php
    function formatPhone($number)
     {
        $number = preg_replace('/[^\d]/', '', $number); //Remove anything that is not a number
        if(strlen($number) < 10)
         {
            return false;
         }
        return substr($number, 0, 3) . '-' . substr($number, 3, 3) . '-' . substr($number, 6);
     }
    
    
    foreach(array('(858)5551212', '(858)555-1212', '8585551212','858-555-1212', '123') as $number)
     {
        $number = formatPhone($number);
        if($number)
          {
              echo $number . "\n";
          }
     }
     ?>
    

    以上返回:

    858-555-1212
    858-555-1212
    858-555-1212
    858-555-1212
    

    【讨论】:

    • 注意:TenebrousX 的答案或多或少是一样的,但如果我们打高尔夫球我赢了。
    【解决方案2】:
    function format_phone($phone)
    {
        $phone = preg_replace("/[^0-9]/", "", $phone);
    
        if(strlen($phone) == 7)
            return preg_replace("/([0-9]{3})([0-9]{4})/", "$1-$2", $phone);
        elseif(strlen($phone) == 10)
            return preg_replace("/([0-9]{3})([0-9]{3})([0-9]{4})/", "($1) $2-$3", $phone);
        else
            return $phone;
    }
    

    【讨论】:

      【解决方案3】:

      类似的东西

      function formatPhone($number)
      {
        $number = str_replace(array('(', ')', '-', ' '), '', $number);
        if (strlen($number) == 10)
        {
          $area = substr($number, 0, 3);
          $part1 = substr($number, 3, 3);
          $part2 = substr($number, 6);
      
          return "$area-$part1-$part2";
        }
        else
        {
          return false;
        }
      }
      

      如果传入的数字长度为 10 位,它将返回格式正确的数字。否则返回FALSE

      【讨论】:

        【解决方案4】:

        //电话号码格式
        //示例 $phone = '1111111111'

        $area = substr($phone, 0, 3);
        $part1 = substr($phone, 3, 3);
        $part2 = substr($phone, 6);
        $phone = '('.$area.') '.$part1.'-'.$part2;
        echo $phone;
        

        //看起来像 (111) 111-1111

        【讨论】:

        • 这不会做提问者要求做的事情。请注意,输入可能会有所不同(即不是简单的“数字”字符串)并且不能使用固定的子字符串进行解析。您必须先“清理”输入。
        猜你喜欢
        • 1970-01-01
        • 2020-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多