在 PHP 中格式化电话号码
在本文中,我们将讨论使用 PHP 格式化电话号码的不同方法。我们会将电话号码的格式从+13335092344 更改为 333-509-2344。
PHP 中使用 preg_match()
函数格式化电话号码
我们可以使用内置函数 preg_match()
来格式化电话号码。这个函数从一个字符串中搜索指定的模式。使用该函数的正确语法如下。
preg_match($pattern, $inputString, $matches, $flag, $offset);
内置函数 preg_match()
有五个参数。其详细参数如下
参数 | 说明 | |
---|---|---|
$pattern |
强制 | 它是我们要在给定的字符串中检查的模式。 |
$inputString |
强制 | 它是我们要搜索给定模式的字符串。 |
$matches |
可选 | 如果给定了这个参数,那么函数将匹配过程的结果存储在其中。 |
$flags |
可选 |
该参数有两个选项。PREG_OFFSET_CAPTURE 和 PREG_UNMATCHED_AS_NULL 。 |
$offset |
可选 | 它告诉函数从哪里开始匹配过程。通常情况下,搜索从头开始。 |
这个函数返回一个布尔变量。如果给定的模式存在,它就返回 true
。在提取数字后,我们将以所需的格式打印它们。
下面的程序显示了我们使用 PHP preg_match()
函数来格式化电话号码的方法。
<?php
$number = '+12333509234';
echo("The original number is $number.\n");
if( preg_match( '/^\+\d(\d{3})(\d{3})(\d{4})$/', $number, $matches ) )
{
$result = $matches[1] . '-' .$matches[2] . '-' . $matches[3];
}
echo("The formatted number is $result.");
?>
我们使用/^\+\d(\d{3})(\d{3})(\d{4})$/
模式从字符串中提取号码。这个模式的解释如下。
-
^
是匹配字符串开头的符号。 -
\+
匹配字符串中的+
。+
是 PHP 中的特殊字符,用于匹配前面模式的一次或多次。因此,我们需要在+
之前加上\
来转义这个特殊字符。 -
\d
用来匹配 0-9 的数字。d/d{3}
表示它将匹配三个连续的数字。
输出:
The original number is +12333509234.
The formatted number is 233-350-9234.
在 PHP 中使用 sprintf()
函数来格式化电话号码
我们也可以使用 sprintf()
函数来格式化 PHP 中的电话号码。这个函数给出了几种格式化字符串的模式。我们将使用 substr()
函数提取几个字符串中的数字。之后,我们将使用 sprintf()
函数将这些字符串组合成所需的格式。使用该函数的正确语法如下。
sprintf($formatString, $string1, $string2, ..., $stringN)
sprintf()
函数接受 N+1 个参数。其参数的详细情况如下
参数 | 说明 | |
---|---|---|
$formatString |
强制 | 它是将被应用到给定字符串的格式。 |
$string1 , $string2 , $stringN |
强制 | 它是我们要格式化的字符串。至少必须有一个字符串。 |
函数返回格式化后的字符串。我们将使用格式%s-%s-%s
将数字字符串组合在一起。将两个字符串组合在一起的程序如下。
<?php
$number = '+12333509234';
echo("The original number is $number.\n");
$result = sprintf("%s-%s-%s",
substr($number, 2, 3),
substr($number, 5, 3),
substr($number, 8));
echo("The formatted number is $result.");
?>
输出:
The original number is +12333509234.
The formatted number is 233-350-9234.
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341