PHPで文字列中の特定文字を削除したい場合は、主に以下の関数を使います。
str_replace()str_ireplace()preg_replace()trim()ltrim()rtrim()strip_tags()
もっともよく使うのは str_replace() です。
削除したい文字が明確に決まっている場合は、str_replace() で対象の文字を空文字 "" に置き換えることで削除できます。
たとえば、電話番号からハイフンを削除したい場合は、次のように書きます。
$text = "090-1234-5678";
$result = str_replace("-", "", $text);
echo $result;
出力結果は以下の通りです。
09012345678
str_replace() は、指定した文字列を別の文字列に置き換える関数です。
この例では、ハイフン - を空文字 "" に置き換えているため、結果的に文字列中のハイフンが削除されます。
str_replace()で特定文字を削除する方法
1文字だけ削除する場合
文字列中から特定の1文字を削除する場合は、str_replace() を使うのが簡単です。
$text = "Hello World!";
$result = str_replace("!", "", $text);
echo $result;
出力結果は以下です。
Hello World
この例では、文字列の中にある ! を削除しています。
str_replace() は、対象の文字が文字列内に複数ある場合でも、すべて置換します。
そのため、同じ文字が何度も出てくる場合でも、一括で削除できます。
$text = "apple, orange, banana,";
$result = str_replace(",", "", $text);
echo $result;
出力結果は以下です。
apple orange banana
文字列中にあるすべてのカンマ , が削除されます。
複数の文字をまとめて削除する場合
複数の文字をまとめて削除したい場合は、str_replace() の第一引数に配列を指定します。
$text = "090-1234.5678";
$result = str_replace(["-", "."], "", $text);
echo $result;
出力結果は以下です。
09012345678
この例では、ハイフン - とドット . をまとめて削除しています。
郵便番号や住所などから不要な記号を削除したい場合にも使えます。
$text = "〒123-4567 東京都 渋谷区";
$result = str_replace(["〒", "-", " "], "", $text);
echo $result;
出力結果は以下です。
1234567東京都渋谷区
このように、削除したい文字がはっきりしている場合は、str_replace() を使うと分かりやすく書けます。
特定の文字列を削除する場合
str_replace() では、1文字だけでなく、特定の文字列を削除することもできます。
$text = "PHPは楽しいです。PHPを学びます。";
$result = str_replace("PHP", "", $text);
echo $result;
出力結果は以下です。
は楽しいです。を学びます。
この例では、文字列中にある PHP がすべて削除されます。
ただし、削除後に文章が不自然になる場合があります。
実際の記事本文やユーザー入力を処理する場合は、削除後の文章として問題がないかも確認するとよいです。
str_ireplace()で大文字・小文字を区別せずに削除する方法
大文字と小文字をまとめて削除する場合
英字を削除する場合、大文字と小文字を区別したくないケースがあります。
その場合は、str_ireplace() を使います。
str_ireplace() は、str_replace() の大文字・小文字を区別しない版です。
$text = "PHP php Php";
$result = str_ireplace("php", "", $text);
var_dump($result);
出力結果のイメージは以下です。
string(2) " "
PHP、php、Php がすべて削除され、単語の間にあった半角スペースだけが残ります。
str_replace()との違い
str_replace() は大文字・小文字を区別します。
$text = "PHP php Php";
$result = str_replace("php", "", $text);
echo $result;
出力結果は以下です。
PHP Php
この場合、小文字の php だけが削除されます。
一方で、str_ireplace() を使うと、大文字・小文字の違いを無視して削除できます。
preg_replace()で条件に合う文字を削除する方法
preg_replace()とは
preg_replace() は、正規表現に一致した文字列を置換する関数です。
str_replace() は、削除したい文字や文字列がはっきりしている場合に向いています。
一方で、preg_replace() は、以下のような条件付きの削除に向いています。
- 数字をすべて削除したい
- 数字以外をすべて削除したい
- 英字を削除したい
- 記号を削除したい
- 空白文字をまとめて削除したい
- 特定のパターンに一致する文字列を削除したい
たとえば、文字列中の数字をすべて削除したい場合は、次のように書きます。
$text = "商品A123";
$result = preg_replace("/[0-9]/", "", $text);
echo $result;
出力結果は以下です。
商品A
/[0-9]/ は、0から9までの数字に一致する正規表現です。
一致した数字を空文字 "" に置き換えることで、数字を削除できます。
数字以外を削除して数字だけ残す場合
電話番号や郵便番号などから数字だけを取り出したい場合は、数字以外を削除します。
$text = "TEL: 090-1234-5678";
$result = preg_replace("/[^0-9]/", "", $text);
echo $result;
出力結果は以下です。
09012345678
[^0-9] は「0〜9以外」という意味です。
そのため、英字、記号、スペースなどが削除され、数字だけが残ります。
電話番号、郵便番号、金額、会員番号などを整形する場面でよく使われます。
英字を削除する場合
半角英字を削除したい場合は、次のように書きます。
$text = "ABC商品123";
$result = preg_replace("/[a-zA-Z]/", "", $text);
echo $result;
出力結果は以下です。
商品123
[a-zA-Z] は、半角英字の大文字・小文字に一致します。
英数字を削除する場合
半角英字と数字をまとめて削除したい場合は、次のように書きます。
$text = "ABC商品123";
$result = preg_replace("/[a-zA-Z0-9]/", "", $text);
echo $result;
出力結果は以下です。
商品
この例では、ABC と 123 が削除され、日本語だけが残ります。
記号を削除する場合
記号を削除したい場合は、削除対象の記号を正規表現で指定します。
$text = "Hello! PHP? Laravel.";
$result = preg_replace("/[!?\.]/", "", $text);
echo $result;
出力結果は以下です。
Hello PHP Laravel
この例では、!、?、. を削除しています。
正規表現では、. は特別な意味を持つ文字です。
そのため、ドットそのものを指定したい場合は \. のようにエスケープします。
空白を削除する方法
半角スペースを削除する場合
半角スペースだけを削除したい場合は、str_replace() で対応できます。
$text = "Hello World PHP";
$result = str_replace(" ", "", $text);
echo $result;
出力結果は以下です。
HelloWorldPHP
この例では、文字列中の半角スペースがすべて削除されます。
半角スペースと全角スペースを削除する場合
日本語の文章では、半角スペースだけでなく全角スペースが使われることがあります。
半角スペース " " と全角スペース " " は、PHPでは別の文字として扱われます。
そのため、半角スペースだけを削除しても、全角スペースは残ります。
$text = "東京 大阪 名古屋";
$result = str_replace(" ", "", $text);
echo $result;
出力結果は以下です。
東京 大阪名古屋
全角スペースも削除したい場合は、半角スペースと全角スペースの両方を指定します。
$text = "東京 大阪 名古屋";
$result = str_replace([" ", " "], "", $text);
echo $result;
出力結果は以下です。
東京大阪名古屋
見た目では分かりにくいですが、" " は全角スペースです。
日本語を扱う場合は、半角スペースと全角スペースを区別して考える必要があります。
タブや改行を含む空白文字をまとめて削除する場合
半角スペースだけでなく、タブや改行などもまとめて削除したい場合は、preg_replace() を使うと便利です。
$text = "Hello World\nPHP\tLaravel";
$result = preg_replace("/\s+/", "", $text);
echo $result;
出力結果は以下です。
HelloWorldPHPLaravel
\s は、半角スペース、タブ、改行などの空白文字に一致します。
日本語の文章で全角スペースも含めて削除したい場合は、次のように全角スペースを明示的に含めると分かりやすいです。
$text = "東京 大阪 名古屋";
$result = preg_replace("/[ \s]+/u", "", $text);
echo $result;
出力結果は以下です。
東京大阪名古屋
日本語を含む正規表現では、基本的に u 修飾子を付けると安全です。
改行を削除する方法
改行を完全に削除する場合
文字列中の改行を削除したい場合は、\r\n、\r、\n を削除対象にします。
$text = "Hello\nPHP\nLaravel";
$result = str_replace(["\r\n", "\r", "\n"], "", $text);
echo $result;
出力結果は以下です。
HelloPHPLaravel
改行コードには、主に以下の種類があります。
- Windows系:
\r\n - Unix/Linux系:
\n - 古いMac系:
\r
そのため、改行をまとめて削除する場合は、["\r\n", "\r", "\n"] を指定しておくと対応しやすくなります。
改行をスペースに置き換える場合
文章として読みやすさを残したい場合は、改行を完全に削除するのではなく、半角スペースに置き換える方法もあります。
$text = "Hello\nPHP\nLaravel";
$result = str_replace(["\r\n", "\r", "\n"], " ", $text);
echo $result;
出力結果は以下です。
Hello PHP Laravel
改行を削除すると単語同士がつながってしまうことがあります。
文章データを扱う場合は、「削除する」のか「スペースに置き換える」のかを目的に応じて選ぶとよいです。
trim()で前後の文字を削除する方法
trim()とは
trim() は、文字列の先頭と末尾にある空白や特定の文字を削除する関数です。
文字列全体から特定文字を削除する str_replace() とは違い、trim() は文字列の前後だけを処理します。
$text = " Hello PHP ";
$result = trim($text);
echo $result;
出力結果は以下です。
Hello PHP
この例では、文字列の先頭と末尾にある空白が削除されます。
文字列の途中にある空白は削除されません。
前後の特定文字を削除する場合
trim() の第二引数に削除対象の文字を指定すると、前後にある特定文字を削除できます。
$text = "---Hello PHP---";
$result = trim($text, "-");
echo $result;
出力結果は以下です。
Hello PHP
この例では、文字列の先頭と末尾にある - が削除されます。
ただし、文字列の途中にある - は削除されません。
$text = "---Hello-PHP---";
$result = trim($text, "-");
echo $result;
出力結果は以下です。
Hello-PHP
途中の - も削除したい場合は、trim() ではなく str_replace() を使います。
$text = "---Hello-PHP---";
$result = str_replace("-", "", $text);
echo $result;
出力結果は以下です。
HelloPHP
trim()の第二引数は文字列ではなく文字のリスト
trim() を使うときに注意したいのは、第二引数は「削除したい文字列」ではなく「削除対象にする文字のリスト」だという点です。
たとえば、次のコードを見てみます。
$text = "abcHello PHPcba";
$result = trim($text, "abc");
echo $result;
出力結果は以下です。
Hello PHP
これは、先頭と末尾にある abc という文字列を削除しているのではありません。
a、b、c のいずれかが先頭または末尾にある間、それらを削除しています。
そのため、先頭や末尾にある特定の文字列だけを削除したい場合は、preg_replace() などを使う方が適しています。
ltrim()とrtrim()で片側だけ削除する方法
ltrim()で先頭の文字を削除する場合
文字列の先頭だけを削除したい場合は、ltrim() を使います。
$text = "---Hello PHP---";
$result = ltrim($text, "-");
echo $result;
出力結果は以下です。
Hello PHP---
ltrim() は、文字列の左側、つまり先頭側だけを処理します。
末尾の - は削除されません。
rtrim()で末尾の文字を削除する場合
文字列の末尾だけを削除したい場合は、rtrim() を使います。
$text = "---Hello PHP---";
$result = rtrim($text, "-");
echo $result;
出力結果は以下です。
---Hello PHP
rtrim() は、文字列の右側、つまり末尾側だけを処理します。
先頭の - は削除されません。
先頭や末尾の特定文字列だけを削除する方法
先頭の特定文字列を削除する場合
先頭にある特定の文字列だけを削除したい場合は、preg_replace() を使うと便利です。
$text = "prefix_sample_text";
$result = preg_replace("/^prefix_/", "", $text);
echo $result;
出力結果は以下です。
sample_text
^ は、文字列の先頭を意味します。
そのため、/^prefix_/ と書くことで、先頭にある prefix_ だけを削除できます。
文字列の途中に prefix_ があっても削除されません。
末尾の特定文字列を削除する場合
末尾にある特定の文字列だけを削除したい場合は、$ を使います。
$text = "sample_text_suffix";
$result = preg_replace("/_suffix$/", "", $text);
echo $result;
出力結果は以下です。
sample_text
$ は、文字列の末尾を意味します。
そのため、/_suffix$/ と書くことで、末尾にある _suffix だけを削除できます。
日本語の特定文字を削除する方法
str_replace()で日本語を削除する場合
日本語の特定文字を削除する場合でも、削除対象が明確であれば str_replace() が使えます。
$text = "東京都渋谷区";
$result = str_replace("都", "", $text);
echo $result;
出力結果は以下です。
東京渋谷区
この例では、文字列中の 都 を削除しています。
固定の文字や文字列を削除するだけであれば、日本語でも str_replace() で問題ありません。
preg_replace()で日本語を削除する場合
日本語を正規表現で扱う場合は、u 修飾子を付けるのが基本です。
$text = "商品Aあいう123";
$result = preg_replace("/[あいう]/u", "", $text);
echo $result;
出力結果は以下です。
商品A123
u 修飾子は、正規表現をUTF-8として処理するための指定です。
日本語を含む文字列で preg_replace() を使う場合は、基本的に u を付けると安全です。
ただし、対象の文字列がUTF-8ではない場合、期待通りに処理できないことがあります。
文字化けや処理結果の不具合が起きる場合は、文字コードも確認する必要があります。
HTMLタグを削除する方法
strip_tags()でHTMLタグを削除する場合
文字列中のHTMLタグを削除したい場合は、strip_tags() を使います。
$text = "<p>Hello <strong>PHP</strong></p>";
$result = strip_tags($text);
echo $result;
出力結果は以下です。
Hello PHP
strip_tags() は、HTMLタグやPHPタグを取り除くための関数です。
タグだけを削除し、タグの中にあるテキストは残します。
特定のHTMLタグだけを残す場合
strip_tags() では、許可するタグを指定することもできます。
$text = "<p>Hello <strong>PHP</strong></p>";
$result = strip_tags($text, "<strong>");
echo $result;
出力結果は以下です。
Hello <strong>PHP</strong>
この例では、<strong> タグだけを残し、<p> タグは削除しています。
strip_tags()を使うときの注意点
strip_tags() は、HTMLタグを削除したい場合には便利です。
ただし、セキュリティ対策として万能ではありません。
特に、ユーザーが入力したHTMLを安全に表示したい場合、strip_tags() だけでは不十分なケースがあります。
タグを許可した場合、属性の扱いによっては意図しないHTMLが残る可能性もあります。
ユーザー入力を画面に安全に表示したい場合は、目的に応じて htmlspecialchars() などの使用も検討する必要があります。
たとえば、HTMLタグを「削除」したい場合は strip_tags()、HTMLタグを「文字として安全に表示」したい場合は htmlspecialchars() が使われます。
$text = "<script>alert('test');</script>";
$result = htmlspecialchars($text, ENT_QUOTES, "UTF-8");
echo $result;
このように、HTMLタグを削除したいのか、HTMLとして解釈されないように表示したいのかで、使う関数が変わります。
配列内の文字列から特定文字を削除する方法
array_map()で配列内の文字列を処理する
配列内にある複数の文字列から特定文字を削除したい場合は、array_map() を使うと便利です。
$items = ["090-1234-5678", "080-1111-2222", "070-3333-4444"];
$result = array_map(function ($item) {
return str_replace("-", "", $item);
}, $items);
print_r($result);
出力結果は以下です。
Array
(
[0] => 09012345678
[1] => 08011112222
[2] => 07033334444
)
この例では、配列内の各電話番号からハイフンを削除しています。
配列の中にある文字列をまとめて整形したい場合に使いやすい方法です。
foreachで処理する場合
foreach を使って処理することもできます。
$items = ["090-1234-5678", "080-1111-2222", "070-3333-4444"];
foreach ($items as $key => $item) {
$items[$key] = str_replace("-", "", $item);
}
print_r($items);
出力結果は以下です。
Array
(
[0] => 09012345678
[1] => 08011112222
[2] => 07033334444
)
array_map() は新しい配列を作るイメージ、foreach は既存の配列を更新するイメージで使い分けると分かりやすいです。
実務でよく使う削除例
電話番号からハイフンを削除する
電話番号からハイフンを削除したい場合は、str_replace() を使います。
$tel = "090-1234-5678";
$tel = str_replace("-", "", $tel);
echo $tel;
出力結果は以下です。
09012345678
フォーム入力された電話番号を保存前に整形したい場合などに使えます。
郵便番号から記号を削除する
郵便番号から 〒 やハイフンを削除する場合は、複数の削除対象を配列で指定します。
$zipcode = "〒123-4567";
$zipcode = str_replace(["〒", "-"], "", $zipcode);
echo $zipcode;
出力結果は以下です。
1234567
金額からカンマや円を削除する
金額の文字列からカンマや 円 を削除したい場合も、str_replace() が使えます。
$price = "1,980円";
$price = str_replace([",", "円"], "", $price);
echo $price;
出力結果は以下です。
1980
数値として計算に使いたい場合は、必要に応じて整数に変換します。
$price = "1,980円";
$price = str_replace([",", "円"], "", $price);
$price = (int)$price;
echo $price;
出力結果は以下です。
1980
URLから特定の文字列を削除する
URLから https:// を削除したい場合は、次のように書けます。
$url = "https://example.com/?id=123";
$result = str_replace("https://", "", $url);
echo $result;
出力結果は以下です。
example.com/?id=123
ただし、URLを本格的に処理する場合は、単純な文字列削除よりも parse_url() を使った方が安全なケースがあります。
$url = "https://example.com/?id=123";
$host = parse_url($url, PHP_URL_HOST);
echo $host;
出力結果は以下です。
example.com
URLからドメインだけを取り出したい場合などは、str_replace() よりも parse_url() の方が適しています。
str_replace()とpreg_replace()の使い分け
str_replace()が向いているケース
str_replace() は、削除したい文字や文字列が明確に決まっている場合に向いています。
たとえば、以下のようなケースです。
$result = str_replace("-", "", $text);
$result = str_replace(",", "", $text);
$result = str_replace(["-", " ", " "], "", $text);
具体的には、次のような処理に適しています。
- ハイフンを削除する
- カンマを削除する
- 特定の単語を削除する
- 半角スペースや全角スペースを削除する
- 電話番号から
-を削除する - 郵便番号から
〒や-を削除する - 金額から
,や円を削除する
単純な削除であれば、基本的には str_replace() を使うとよいです。
正規表現を使わないため、コードも読みやすくなります。
preg_replace()が向いているケース
preg_replace() は、条件に一致する文字を削除したい場合に向いています。
たとえば、以下のようなケースです。
$result = preg_replace("/[0-9]/", "", $text);
$result = preg_replace("/[^0-9]/", "", $text);
$result = preg_replace("/\s+/", "", $text);
具体的には、次のような処理に適しています。
- 数字をすべて削除する
- 数字以外をすべて削除する
- 英字を削除する
- 英数字を削除する
- 記号を削除する
- 空白文字をまとめて削除する
- 先頭や末尾にある特定パターンを削除する
ただし、正規表現は書き方を間違えると、意図しない文字まで削除してしまうことがあります。
削除したい文字が明確な場合は str_replace()、条件でまとめて削除したい場合は preg_replace() と考えると分かりやすいです。
PHPで文字列を削除するときの注意点
戻り値を変数に代入する
str_replace() や preg_replace() は、処理後の文字列を返す関数です。
元の変数を自動で変更するわけではありません。
たとえば、次のコードでは元の文字列は変更されません。
$text = "090-1234-5678";
str_replace("-", "", $text);
echo $text;
出力結果は以下です。
090-1234-5678
削除後の文字列を使いたい場合は、戻り値を変数に代入する必要があります。
$text = "090-1234-5678";
$text = str_replace("-", "", $text);
echo $text;
出力結果は以下です。
09012345678
これは、preg_replace()、trim()、strip_tags() などでも同じです。
半角スペースと全角スペースを区別する
PHPでは、半角スペースと全角スペースは別の文字として扱われます。
$text = "東京 大阪 名古屋";
$result = str_replace(" ", "", $text);
echo $result;
出力結果は以下です。
東京 大阪名古屋
半角スペースだけを削除しても、全角スペースは残ります。
日本語の文字列を処理する場合は、全角スペースも削除対象に含めるとよいです。
$result = str_replace([" ", " "], "", $text);
正規表現では特殊文字に注意する
preg_replace() を使う場合、正規表現の特殊文字に注意が必要です。
たとえば、. は正規表現では「任意の1文字」という意味を持ちます。
ドットそのものを削除したい場合は、\. のようにエスケープします。
$text = "example.com";
$result = preg_replace("/\./", "", $text);
echo $result;
出力結果は以下です。
examplecom
他にも、以下のような文字は正規表現で特別な意味を持つことがあります。
. + * ? [ ] ( ) { } ^ $ | \
これらを普通の文字として扱いたい場合は、エスケープが必要です。
preg_replace()はエラー時にnullを返す可能性がある
preg_replace() は、正規表現に問題がある場合などに null を返すことがあります。
通常の簡単なコードではあまり意識しなくてもよいですが、実務で安全に処理したい場合は、結果が null でないか確認すると安心です。
$result = preg_replace("/[^0-9]/", "", $text);
if ($result === null) {
// 正規表現エラーなどの処理
}
特に、複雑な正規表現を使う場合や、ユーザー入力をもとに正規表現を組み立てる場合は注意が必要です。
str_replace()の置換順に注意する
str_replace() で配列を指定する場合、置換は配列の順番に処理されます。
削除だけであれば大きな問題になることは少ないですが、複数の置換を組み合わせる場合は、置換順によって結果が変わることがあります。
たとえば、文字を別の文字に置き換える処理を複数行う場合は、先に置換された文字が次の置換対象になる可能性があります。
文字の削除では比較的安全に使えますが、置換処理も同時に行う場合は順番に注意しましょう。
PHPで特定文字を削除する方法のまとめ
PHPで文字列中の特定文字を削除する場合、もっとも基本的なのは str_replace() です。
$result = str_replace("削除したい文字", "", $text);
複数の文字を削除したい場合は、配列で指定できます。
$result = str_replace(["-", " ", " "], "", $text);
数字や英字、空白文字など、条件に一致する文字を削除したい場合は preg_replace() を使います。
$result = preg_replace("/[^0-9]/", "", $text);
前後の空白や特定文字だけを削除したい場合は、trim()、ltrim()、rtrim() を使います。
$result = trim($text);
$result = ltrim($text, "-");
$result = rtrim($text, "-");
HTMLタグを削除したい場合は、strip_tags() が便利です。
$result = strip_tags($text);
ただし、strip_tags() はセキュリティ対策として万能ではありません。
ユーザー入力を安全に画面表示したい場合は、htmlspecialchars() などの使用も検討しましょう。
実務では、次のように使い分けると分かりやすいです。
- 削除したい文字が明確な場合は
str_replace() - 大文字・小文字を区別せずに削除したい場合は
str_ireplace() - 条件に一致する文字を削除したい場合は
preg_replace() - 先頭・末尾だけ削除したい場合は
trim()、ltrim()、rtrim() - HTMLタグを削除したい場合は
strip_tags()
PHPで文字列を扱うときは、削除したい対象が「固定の文字」なのか、「条件に一致する文字」なのか、「前後だけ」なのかを整理すると、適切な関数を選びやすくなります。
以上、PHPで文字列中の特定文字を削除する方法についてでした。
最後までお読みいただき、ありがとうございました。










