21

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

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

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

4

5 回答 5

98

正则表达式对于这个来说绝对是矫枉过正。如果您想获取一个“电话号码”并将其规范化为 10 位数字,那么这将是一个正则表达式的好用处。要执行您的要求,只需执行以下操作:

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

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

于 2010-01-18T23:21:34.150 回答
21

看看这里:格式化电话号码

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;
}
于 2010-01-18T23:20:08.193 回答
6

我可能会去

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

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

于 2010-01-18T23:23:20.260 回答
3

微不足道,您可以执行以下操作:

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

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

"(\1) \2-\3

但在实践中,自由形式的数据通常有点棘手

于 2010-01-18T23:21:35.477 回答
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);
  }
}
于 2015-10-27T22:24:17.753 回答