PHPでプログラミングを行っていると、文字列から特定の文字や記号を削除したい場面は非常に多くあります。
例えば、ユーザーが入力した電話番号からハイフン「-」を取り除いたり、金額に含まれるカンマ「,」を削除して数値計算の準備をしたり、不要な空白を除去してデータを整形したりするケースです。
このような文字列操作は、データを正しく扱うための基本であり、PHPにはそのための強力な関数がいくつも用意されています。
この記事では、現在のPHP開発における、文字列から特定の文字を削除するための代表的な3つの方法を、それぞれの特徴と使いどころを交えながら、豊富なサンプルコードと共に徹底的に解説していきます。
【本記事の信頼性】
- 執筆者は元エンジニア
- 大手プログラミングスクールのWebディレクター兼ライターを経験
- 自らも地元密着型のプログラミングスクールを運営
受講生から評判の良いプログラミングスクール
スクール |
特徴 |
受講料金 |
大手比較サイトで4年連続人気NO.1!受講生からの評判も非常に高く、Web系のエンジニアを目指すならRUNTEQ一択。 | 550,000円(給付金適用あり) | |
月単価80万円以上の現役エンジニア講師による指導!一度入会すればサポートは半永久的。 | 498,000円 | |
格安で質の高いWeb制作スキルを習得したい人におすすめ!業界最安級の料金でありながら、コミュニティやサポートが充実。 | 129,800円~ | |
完全無料でプログラミングが学べる貴重なスクール!最短1ヶ月で卒業可能。ゼロスク運営会社への就職もできる。 | 無料 | |
長期間に渡って学習し、希少人材を目指す人に最適なスクール!受講料は高いものの、高収入を得られる人材を目指せる。 | 96~132万円 |
方法1:str_replace関数(基本かつ最速)
最も一般的で、かつ多くの場合で最も高速な方法がstr_replace
関数です。
この関数は、指定した文字列を検索し、別の文字列に置き換える機能を持っています。
文字を「削除」したい場合は、置き換え後の文字列に空文字''
を指定します。
サンプルコード1:特定の1文字を削除する
<?php
$phone_number = '090-1234-5678';
// ハイフン'-'を空文字''に置き換える(=削除する)
$cleaned_number = str_replace('-', '', $phone_number);
echo $cleaned_number;
?>
実行結果
09012345678
ソースコードの解説
str_replace()
は、第1引数に検索したい文字列('-'
)、第2引数に置き換えたい文字列(''
)、第3引数に対象となる文字列($phone_number
)を指定します。
このコードでは、$phone_number
の中からすべてのハイフンを見つけ出し、それを空文字に置き換えることで、結果的にハイフンが削除された文字列を生成しました。
サンプルコード2:複数の異なる文字を一度に削除する
str_replace
の第1引数には配列を渡すこともできます。
これにより、複数の異なる文字を一度の呼び出しで効率的に削除することが可能です。
<?php
$text = 'PHP は、とても (楽しい) 言語です。';
// 削除したい文字を配列で指定
$chars_to_remove = [' ', '(', ')', ' '];
$cleaned_text = str_replace($chars_to_remove, '', $text);
echo $cleaned_text;
?>
実行結果
PHPは、とても楽しい言語です。
ソースコードの解説
この例では、半角スペース、括弧、全角スペースを配列で指定し、それらすべてを一度に削除しています。
単純な文字の削除であれば、まずこのstr_replace
関数を検討するのがよいでしょう。
方法2:preg_replace関数(パターンで削除する強力な方法)
str_replace
が特定の文字列を対象とするのに対し、preg_replace
関数は「正規表現」というパターンを使って、より柔軟で強力な置換・削除を行います。
「すべての数字」や「英字以外のすべての文字」といった、複雑な条件での文字削除が可能です。
サンプルコード1:数字をすべて削除する
<?php
$string = '商品ID: A-1029 と B-3088 です。';
// 正規表現パターン '/[0-9]/' で数字にマッチさせる
$no_digits_string = preg_replace('/[0-9]/', '', $string);
echo $no_digits_string;
?>
実行結果
商品ID: A- と B- です。
ソースコードの解説
preg_replace
の第1引数には、正規表現のパターンを指定します。'/[0-9]/'
というパターンは、「0から9までのいずれかの数字1文字」に一致します。このパターンに一致する文字をすべて空文字''
に置き換えることで、文字列から数字だけをきれいに取り除くことができました。
サンプルコード2:特定の文字「以外」をすべて削除する
preg_replace
の真価は、特定の文字だけを残し、それ以外をすべて削除するような処理で発揮されます。
<?php
$price_text = '価格: ¥1,980 (税込)';
// 数字以外をすべて削除する正規表現パターン '/[^0-9]/'
$only_numbers = preg_replace('/[^0-9]/', '', $price_text);
echo $only_numbers;
?>
実行結果
1980
ソースコードの解説
正規表現パターン'/[^0-9]/'
の^
は「否定」を意味します。
つまり、「0から9までの数字以外のすべての文字」に一致するパターンとなります。
これにより、文字列から数字だけを抽出するという、str_replace
では難しい処理を簡単に行えました。
柔軟性が高い反面、str_replace
に比べて少しだけ処理速度が遅くなる傾向があります。
方法3:strtr関数(安全な文字単位の置換)
strtr
関数は、文字列中の文字を1文字ずつ変換(translate)するための関数です。
str_replace
と似ていますが、いくつかの重要な違いがあり、特定のケースではより安全で高速に動作します。
文字を削除する場合は、第2引数にキーを削除対象文字、値を空文字''
とした連想配列を渡します。
サンプルコード
<?php
$text = 'abc-123 xyz-789';
// 削除したい文字と空文字をペアにした連想配列
$replace_pairs = [
'a' => '',
'x' => '',
'-' => ''
];
$cleaned_text = strtr($text, $replace_pairs);
echo $cleaned_text;
?>
実行結果
bc123 yz789
ソースコードの解説
strtr
は、$replace_pairs
で指定されたキー('a'
, 'x'
, '-'
)を、対応する値(''
)に1文字ずつ置き換えていきます。
str_replace
と異なり、一度置き換えた部分が再度置き換えの対象になることがないため、意図しない動作を防げる場合があります。
また、たくさんの種類の文字を削除したい場合、str_replace
よりも高速に動作することがあります。
【目的別】どの関数を使うべきか?
3つの関数を紹介しましたが、どの関数をいつ使えばよいか、目的別に整理しましょう。
単純な文字・文字列を削除したい場合
str_replace
を使いましょう。
最も処理が速く、コードも直感的です。
「ハイフンを消す」「空白を消す」といった、削除対象が明確な場合に最適です。
パターンに一致する文字を削除したい場合
preg_replace
を使いましょう。
「数字をすべて消す」「ひらがな以外をすべて消す」といった、ルールに基づいた削除が必要な場合に唯一の選択肢となります。
たくさんの種類の1文字を安全に削除したい場合
strtr
を検討しましょう。
str_replace
で意図しない置換が起こる可能性がある場合や、置換対象の文字種が非常に多い場合に、より安全で高速な代替案となります。
基本的には、まずstr_replace
で対応できないかを考え、それで難しければpreg_replace
を使う、という流れで考えるとよいでしょう。
まとめ
今回は、PHPで文字列から特定の文字を削除するための3つの主要な関数について、その使い方と特徴を詳しく解説しました。
なお、PHPを体系的に学んだり、PHPのスキルを高めたりするためには、プログラミングスクールを利用するのも有効です。
細かな疑問がすぐに解決するだけでなく、現役エンジニアが「質の高いポートフォリオ」を作成するための手助けをしてくれたり、エンジニア就職・転職のコツを教えてくれたりするなど、様々なメリットがありますので、独学に疲れた方は検討してみてはいかがでしょうか。