如何将10位数字符串格式化为电话号码?

时间:2010-01-18 23:16:37

标签: php regex phone-number

我有10个字符长字符串形式的数据库记录,例如4085551234.

我希望将这些格式化为以下格式:(408)555-1234。

我认为这与正则表达式有关。我是编程新手,在这里完全是自学成才,因此任何与执行文本处理相关的资源也会受到赞赏。谢谢!

5 个答案:

答案 0 :(得分:91)

正则表达式对于这一个来说肯定是矫枉过正的。如果你想拿一个“电话号码”并将其标准化为10位数,这对正则表达式来说是一个很好的用法。为了做你想问的事,只需做一些事情:

echo '('.substr($data, 0, 3).') '.substr($data, 3, 3).'-'.substr($data,6);

由于您已经知道如何划分数据,因此您可以使用substr或类似的东西来获取所需的部分。 RegEx对于匹配并不总是具有严格格式的字符串很有用。 (就像可变数量的空格,它之前或之后的可变内容,额外的破折号等)。但在你的情况下,输入总是严格格式化为10位数字,没有别的,所以你不需要RegEx的额外开销来格式化它。

答案 1 :(得分:19)

看看这里:Format phone number

function format_phone($phone)
{
    $phone = preg_replace("/^\d/", "", $phone);

    if(strlen($phone) == 7)
        return preg_replace("/(\d{3})(\d{4})/", "$1-$2", $phone);
    elseif(strlen($phone) == 10)
        return preg_replace("/(\d{3})(\d{3})(\d{4})/", "($1) $2-$3", $phone);
    else
        return $phone;
}

答案 2 :(得分:6)

我可能会选择

$num = "4085551234";  // given                                                  
$formatted = "(".substr($num,0,3).") ".substr($num,3,3)."-".substr($num,6);

正则表达式在这里并不合适。

答案 3 :(得分:3)

你可以做一些像:

\(\d\{3\}\)\(\d\{3\}\)\(\d\{4\}\)

将10个数字与3个子组表达式匹配,然后使用每个子组打印出来:

"(\1) \2-\3

但实际上,自由格式数据通常有点棘手

答案 4 :(得分:2)

我必须为我的高级计算机科学课做这个问题。 爪哇:

  

编写一个接受10位数#的程序并将其格式化为电话号码。

     

例如:705726552
    输出:(705)726-2552

import java.util.Scanner;
  public class  TelNumCorrection{

  public static void main(String[]args){

    Scanner scan = new Scanner(System.in);
    System.out.println("Please enter a 10 digit number");
    String num=scan.nextLine();

    String a=num.substring(0,3);
    String b=num.substring(3,6);
    String c=num.substring(6);
    System.out.println("("+a+ ")"+b+"-"+c);
  }
}