2010-01-18 95 views
18

我有10个字符长的字符串形式的数据库记录,如4085551234.如何将一个10位数的字符串格式化为电话号码?

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

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

+0

什么是DB技术(MySQL的)? – grenade 2010-01-18 23:19:53

+2

只是一边 - 电话号码格式在全球范围内变化很大,所以除非您确定只显示美国或类似的号码,否则您可能不想硬编码特定的格式。 – Joe 2010-01-18 23:49:10

+0

类似的:http://stackoverflow.com/a/5872200/386579 – 2013-12-17 07:54:33

回答

88

一个正则表达式,绝对是大材小用了这一个。如果你想要一个“电话号码”并将其标准化为10位数,那对于正则表达式来说就是一个很好的用法。要做到你问什么,只是这样做:

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

既然你已经知道如何瓜分你的数据,你可以只使用SUBSTR或类似的抓住你想要的部分东西。 RegEx对于匹配不总是具有严格格式的字符串非常有用。 (像可变数量的空格,变量之前或之后的东西,额外的破折号等)。但在你的情况下,输入总是严格格式化10位数字,没有别的,所以你不需要RegEx的额外开销来格式化它。

+2

我最喜欢这个背后的方法论。非常感谢!我可以看到你是如何做到的,并且我学到了一些关于substr()的知识。谢谢! – dmanexe 2010-01-18 23:44:41

+1

单引号在这里可以正常工作,因为它不需要处理。 – Cymbals 2012-10-04 14:10:36

18

到这里看看: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; 
} 
3

中平凡,你可以这样做:

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

要匹配10个数字分为3个亚组表达式,然后利用每个小组将它们打印出来:

"(\1) \2-\3 

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

6

我可能会去

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

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

+0

谢谢!类似于上面提到的解决方案,我去了。 – dmanexe 2010-01-18 23:41:21

2

我不得不为我的高级贴片计算机科学课做这个问题。 Java:

编写一个程序,接受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); 
    } 
} 
+1

它确实回答了这个问题,它提供了一个程序来扫描,然后根据问题的要求格式化/打印数字 – amdixon 2015-10-28 08:29:21

+2

这个问题被标记为php,因为这样的答案似乎不相关。 – timss 2015-10-28 16:55:08

相关问题