PHP で電話番号をフォーマットする
この記事では、PHP を使って電話番号をフォーマットするさまざまな方法について説明します。今回は、+13335092344
から 333-509-2344
までの電話番号を書式設定します。
関数 preg_match()
を用いて PHP で電話番号を書式設定する
電話番号の書式設定には、組み込みの関数 preg_match()
を利用することができます。この関数は文字列から指定されたパターンを検索します。この関数を利用するための正しい構文は以下の通りです。
preg_match($pattern, $inputString, $matches, $flag, $offset);
組み込み関数 preg_match()
は 5つのパラメータを持ちます。パラメータの詳細は以下の通りです。
パラメータ | 説明 | |
---|---|---|
$pattern |
強制的 | これは与えられた文字列の中でチェックしたいパターンです。 |
$inputString |
強制的 | 与えられたパターンを検索したい文字列です。 |
$matches |
任意 | このパラメータが与えられた場合、この関数はマッチング処理の結果を格納します。 |
$flags |
任意 | このパラメータには 2つのオプションがあります。PREG_OFFSET_CAPTURE と PREG_UNMATCHED_AS_NULL の 2つのオプションがあります。このパラメータの説明はこちらを参照してください。 |
$offset |
任意 | どこからマッチング処理を開始するかの機能を伝えます。通常、検索は最初から始まります。 |
この関数はブール値を返します。与えられたパターンが存在すれば真を返します。数値を抽出した後、必要な形式で出力します。
下のプログラムは、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 の特殊文字で、先ほどのパターンに 1 回以上マッチします。そのため、この特殊文字をエスケープするには+
の前に\
をつける必要があります。- 0 から 9 までの一桁の数字にマッチさせるには
\d
を使用します。\d{3}
は、3つの連続した数字にマッチすることを意味しています。
出力:
The original number is +12333509234.
The formatted number is 233-350-9234.
関数 sprintf()
を用いた PHP での電話番号の書式設定
PHP で電話番号を書式設定するには、sprintf()
関数を使用することもできます。この関数は文字列をフォーマットするためのいくつかのフォーマットパターンを提供しています。substr()
関数を用いて、いくつかの文字列から電話番号を抽出します。その後、sprintf()
関数を用いてこれらの文字列を必要な形式に結合します。この関数を使用するための正しい構文は以下の通りです。
sprintf($formatString, $string1, $string2, ..., $stringN)
関数 sprintf()
は N+1 個のパラメータを受け付ける。パラメータの詳細は以下の通りです。
パラメータ | 説明 | |
---|---|---|
$formatString |
強制的 | 与えられた文字列に適用されるフォーマットです。 |
$string1 、$string2 、$stringN |
強制的 | フォーマットしたい文字列です。少なくとも 1つの文字列は必須です。 |
この関数はフォーマットされた文字列を返します。ここでは、%s-%s-%s-%s
という形式を用いて数値文字列を結合します。2つの文字列を結合するプログラムは以下の通りです。
<?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.