用于在PHP中将破折号添加到美国电话号码的功能

Cat*_*ish 11 php

在PHP中将破折号添加到电话号码的最佳方法是什么?我有一个格式的数字,xxxxxxxxxx我希望它的格式为xxx-xxx-xxxx.这仅适用于10位美国电话号码.

Thi*_*ilo 38

$number = "1234567890";
$formatted_number = preg_replace("/^(\d{3})(\d{3})(\d{4})$/", "$1-$2-$3", $number);
Run Code Online (Sandbox Code Playgroud)

编辑:要更加通用并规范化以各种格式提供的美国电话号码(这应该是常见的做法 - 没有理由强迫人们输入特定格式的电话号码,因为你所有的'感兴趣的是数字,你可以简单地丢弃其余部分):

function localize_us_number($phone) {
  $numbers_only = preg_replace("/[^\d]/", "", $phone);
  return preg_replace("/^1?(\d{3})(\d{3})(\d{4})$/", "$1-$2-$3", $numbers_only);
}

echo localize_us_number("5551234567"), "\n";
echo localize_us_number("15551234567"), "\n";
echo localize_us_number("+15551234567"), "\n";
echo localize_us_number("(555) 123-4567"), "\n";
echo localize_us_number("+1 (555) 123-4567"), "\n";
echo localize_us_number("Phone: 555 1234567 or something"), "\n";
Run Code Online (Sandbox Code Playgroud)


Emi*_*röm 9

$number = '1234567890';
if(ctype_digit($number) && strlen($number) == 10) {
  $number = substr($number, 0, 3) .'-'.
            substr($number, 3, 3) .'-'.
            substr($number, 6);
}
Run Code Online (Sandbox Code Playgroud)

或者,如果你出于某种原因想要避免使用substr,但这更耗资源(尽管不是很多 - 选择你喜欢的那个):

$number = '1234567890';
if(ctype_digit($number) && strlen($number) == 10) {
  $parts = str_split($number, 3);
  $number = $parts[0] .'-'. $parts[1] .'-'. $parts[3].$parts[4];
}
Run Code Online (Sandbox Code Playgroud)