【PHP8.x】ctype_space関数の使い方

作成日: 更新日:

ctype_space関数は、渡された文字列がすべて空白文字で構成されているかどうかを判定する関数です。この関数は、指定された文字列が、通常のスペース文字、タブ文字(\t)、改行文字(\n)、フォームフィード文字(\f)、垂直タブ文字(\v)、復帰文字(\r)といった標準的な空白文字のみで構成されているかをチェックします。

この関数は、1つの文字列を引数として受け取り、その文字列内のすべての文字が空白文字である場合にのみ、真偽値のtrueを返します。もし文字列中に空白文字以外の文字が1つでも含まれていたり、文字列が全くの空であったりした場合は、falseを返します。特に、空の文字列("")を引数として渡した場合、この関数はfalseを返すという点に注意が必要です。これは、空の文字列が「すべて空白文字である」とは見なされないためです。

ctype_space関数は、主にシングルバイト文字セット、特にASCII文字の範囲で動作するように設計されています。そのため、日本語のようなマルチバイト文字は空白文字として認識されません。多言語対応のアプリケーションで空白文字を扱う場合は、他の文字列処理関数や正規表現の使用を検討する必要があるでしょう。

システム開発において、この関数は、ユーザー入力の検証、データの前処理、またはファイル内容の解析などで、文字列が実質的な内容を含まず、空白のみで構成されているかを判断する際に非常に有用です。例えば、入力フォームの必須項目が空白だけで送信されていないかを確認するといった用途に活用できます。

基本的な使い方

構文(syntax)

<?php
// 文字列がすべて空白文字(スペース、タブ、改行など)で構成されているかを確認します。
// ctype_space(string $text): bool

$text_all_spaces = " \t\n"; // スペース、タブ、改行を含む文字列
$text_with_chars = "Hello World"; // 文字を含む文字列

// 文字列が空白文字のみで構成されているかチェック
var_dump(ctype_space($text_all_spaces)); // 出力: bool(true)
var_dump(ctype_space($text_with_chars));  // 出力: bool(false)
?>

引数(parameters)

string $text

  • string $text: スペース文字(空白、タブ、改行など)のみで構成されているかを確認したい文字列

戻り値(return)

bool

引数として渡された文字列が、空白文字(スペース、タブ、改行など)のみで構成されている場合に true を返します。それ以外の場合は false を返します。

サンプルコード

PHPでアルファベットとスペースのみか判定する

<?php

declare(strict_types=1);

/**
 * 文字列がアルファベットと半角スペースのみで構成されているかチェックします。
 *
 * キーワード 'ctype_alpha with space' の要求を満たすための実装例です。
 * ctype_alpha() はアルファベットのみ、ctype_space() は空白文字のみを判定するため、
 * 両方が混在する文字列を判定するには、このような工夫が必要になります。
 *
 * @param string $text チェックする文字列
 * @return bool アルファベットと半角スペースのみの場合は true、それ以外は false
 */
function isAlphaWithSpace(string $text): bool
{
    // 文字列から全ての半角スペースを削除します。
    $textWithoutSpaces = str_replace(' ', '', $text);

    // スペースを削除した結果が空でなく、かつ全てアルファベットであるかチェックします。
    // これにより、元の文字列が空やスペースのみだった場合も false となります。
    return $textWithoutSpaces !== '' && ctype_alpha($textWithoutSpaces);
}

// --- 検証用のデータ ---
$testStrings = [
    'PHP is fun',      // true: アルファベットとスペース
    'HelloWorld',      // true: アルファベットのみ
    'PHP version 8',   // false: 数字を含む
    'Hello-World',     // false: 記号を含む
    ' ',               // false: スペースのみ
    '',                // false: 空文字列
];

// --- 実行と結果の表示 ---
foreach ($testStrings as $string) {
    // isAlphaWithSpace 関数でチェックし、結果を bool 値で取得
    $result = isAlphaWithSpace($string);

    // var_dump を使って、元の文字列と結果を分かりやすく表示
    echo "Check '{$string}': ";
    var_dump($result);
}

?>

このPHPコードは、与えられた文字列がアルファベットと半角スペースのみで構成されているかを判定するisAlphaWithSpace関数を定義しています。PHPの組み込み関数であるctype_spaceは、引数として受け取った文字列が空白文字のみで構成されている場合にtrueを返し、ctype_alphaは文字列がアルファベットのみで構成されている場合にtrueを返します。しかし、これら単体の関数では、アルファベットと半角スペースが混在する文字列を直接判定することはできません。

そこでisAlphaWithSpace関数は、まずstr_replace関数を使って引数の文字列$textから全ての半角スペースを削除します。次に、半角スペースを削除した結果の文字列が空ではないことを確認し、その上でctype_alpha関数を使って文字列が全てアルファベットであるかを判定します。この二段階のチェックにより、元の文字列がアルファベットと半角スペースのみで構成されている場合に、この関数はtrueを戻り値として返します。それ以外の場合、例えば数字や記号が含まれる場合、あるいは文字列が空や半角スペースのみの場合にはfalseを返します。サンプルコードの検証部分では、多様なテスト文字列を用いてisAlphaWithSpace関数が意図通りに動作することを示しています。

ctype_space関数は半角スペースだけでなく、タブや改行などの空白文字もtrueと判定します。このサンプルコードはstr_replaceで半角スペースのみを削除しているため、タブ等が含まれる文字列では意図通りに動作しない点に注意が必要です。また、ctype_alphaをはじめとするctype_*系の関数は、日本語のようなマルチバイト文字を正しく判定できません。あくまで英字アルファベットとASCII範囲の文字を対象とした関数です。コード内の空文字列チェックは、元の文字列がスペースのみだった場合に、スペース除去後が空になりctype_alpha('')falseを返す仕様を明確にするための重要な処理です。

【PHP8.x】ctype_space関数の使い方 | いっしー@Webエンジニア