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

dma*_*exe 18 php regex phone-number

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

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

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

Soa*_*Box 91

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

echo '('.substr($data, 0, 3).') '.substr($data, 3, 3).'-'.substr($data,6);
Run Code Online (Sandbox Code Playgroud)

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

  • 我最喜欢这个背后的方法.非常感谢!我可以看到你是怎么做的,我学到了一些关于substr()的知识.谢谢! (2认同)

Rub*_*ias 19

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

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;
}
Run Code Online (Sandbox Code Playgroud)


Gru*_*rig 6

我可能会去

$num = "4085551234";  // given                                                  
$formatted = "(".substr($num,0,3).") ".substr($num,3,3)."-".substr($num,6);
Run Code Online (Sandbox Code Playgroud)

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