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

作成日: 更新日:

ctype_digit関数は、指定された文字列がすべて「0」から「9」までの数字で構成されているかどうかを検査する関数です。この関数は、引数として渡された文字列の各文字が数字であるかを評価し、その結果を真偽値(trueまたはfalse)で返します。

具体的には、文字列が1文字以上の数字のみで構成されている場合にtrueを返します。文字列中に数字以外の文字(例えば、アルファベット、記号、スペース、負の符号「-」、小数点「.」など)が一つでも含まれている場合、または文字列が空である場合には、falseを返します。

この関数は、入力されたデータが純粋な数字のみで構成されていることを確認したい場合に非常に役立ちます。例えば、電話番号や郵便番号、特定のコードなど、数字のみを期待するデータのバリデーション(検証)に利用できます。

引数には文字列を渡すことが一般的です。もし文字列以外の値が渡された場合、PHPは内部的にその値を文字列に変換してから検査を行います。しかし、PHP 8.1以降のバージョンでは、文字列以外の値を直接渡すと非推奨の警告が発生する可能性があるため、事前に文字列型に変換してから渡すことが推奨されます。ロケールの設定に影響されず、常にASCIIの数字のみを厳密に検査します。

基本的な使い方

構文(syntax)

<?php
$text = "12345";
var_dump(ctype_digit($text));
?>

引数(parameters)

string $text

  • string $text: 数字のみで構成されているか検証したい文字列

戻り値(return)

bool

指定された文字列が全て数字文字で構成されている場合に true を、そうでない場合に false を返します。

サンプルコード

PHP ctype_digitで文字列が数字か判定する

<?php

/**
 * ctype_digit関数の使用例を示す関数です。
 *
 * ctype_digit()は、与えられた文字列がすべて数字(0-9)で構成されているかをチェックします。
 * 空文字列、負の数(ハイフンを含む)、浮動小数点数(小数点を含む)などは数字とは見なされず、falseを返します。
 * 数字のみで構成される文字列の場合にtrueを返します。
 */
function demonstrateCtypeDigit(): void
{
    // 様々な種類の文字列でctype_digitの動作を確認
    $testStrings = [
        "12345",       // 全て数字の文字列
        "0",           // 1桁の数字
        "007",         // 先頭に0を含む数字
        "",            // 空文字列
        "Hello",       // 数字以外の文字を含む文字列
        "123a45",      // 数字と数字以外の文字が混在する文字列
        "-123",        // 負の数(ハイフンを含むためfalse)
        "12.34",       // 浮動小数点数(小数点を含むためfalse)
        " ",           // スペースのみの文字列
        "1 2 3",       // スペースを含む数字
    ];

    echo "--- ctype_digit() 関数の動作確認 ---\n";

    foreach ($testStrings as $text) {
        // ctype_digit関数を呼び出し、結果を判定
        if (ctype_digit($text)) {
            echo "文字列 '" . $text . "' は、すべて数字で構成されています。\n";
        } else {
            echo "文字列 '" . $text . "' は、すべて数字で構成されていません。\n";
        }
    }
}

// 関数を実行し、結果を出力
demonstrateCtypeDigit();

PHPのctype_digit関数は、与えられた文字列がすべて数字(0-9)で構成されているかを厳密にチェックします。この関数は、引数として検証したい文字列を受け取り、その文字列が完全に数字のみで構成されていればtrue(真)を、それ以外の場合にはfalse(偽)を戻り値として返します。

サンプルコードでは、demonstrateCtypeDigitという関数の中で、様々な種類の文字列を用意してctype_digitの動作例を示しています。例えば、"12345"や"0"、"007"といった数字のみの文字列に対しては、関数はtrueを返します。

しかし、空文字列""、"Hello"のように数字以外の文字が含まれる文字列、"123a45"のように数字と文字が混在する文字列、"-123"のようなハイフンを含む負の数、"12.34"のような小数点を含む浮動小数点数、またはスペースを含む文字列 (" ", "1 2 3") などに対しては、falseが返されます。これは、ctype_digitが数字以外の文字(ハイフン、小数点、スペースなども含む)を一切許容しないためです。この関数は、入力された文字列が純粋な数字のみで構成されているかを確認したい場合に非常に有効です。

ctype_digit関数は、与えられた文字列がすべて0から9の数字文字のみで構成されているかを厳密に判定します。初心者が注意すべき点として、空文字列、負の数を示すハイフンを含む文字列、小数点を含む浮動小数点数、およびスペースを含む文字列は、すべて数字とはみなされずfalseを返します。数字以外の文字が一つでも含まれるとfalseとなるため、この関数の厳密な挙動を理解しておくことが重要です。数値として扱えるかを判断するis_numeric関数とは目的が異なるため、文字列が純粋な数字文字のみで構成されているかをチェックする際に適切に利用してください。

ctype_digit() とマイナス記号の挙動

<?php

/**
 * ctype_digit() 関数の基本的な動作と、特にマイナス記号 (-) を含む文字列に対する振る舞いを
 * システムエンジニアを目指す初心者向けにデモンストレーションします。
 *
 * ctype_digit() は、文字列のすべての文字が '0' から '9' の数字である場合にのみ true を返します。
 * それ以外の文字 (例: マイナス記号、小数点、スペース、アルファベット) が含まれる場合は false を返します。
 * また、空文字列の場合も false を返します。
 *
 * @param string $text チェックする文字列。
 * @return void
 */
function demonstrateCtypeDigit(string $text): void
{
    echo "文字列: '{$text}'\n";
    if (ctype_digit($text)) {
        echo "  結果: TRUE - すべての文字が数字です (0-9)。\n";
    } else {
        echo "  結果: FALSE - 数字以外の文字が含まれるか、空文字列です。\n";
    }
    echo "----------------------------------------\n";
}

// ----------------------------------------
// ctype_digit() の動作例
// ----------------------------------------

// 1. すべてが数字の文字列
demonstrateCtypeDigit("12345");
demonstrateCtypeDigit("0");

// 2. キーワード「マイナス」に関連する重要なケース
//    ctype_digit() はマイナス記号 '-' を数字とはみなしません。
//    そのため、負の数である "-123" は false を返します。
demonstrateCtypeDigit("-123");

// 3. その他の非数字文字を含む文字列
demonstrateCtypeDigit("1.23");   // 小数点が含まれる
demonstrateCtypeDigit("abc");    // アルファベットが含まれる
demonstrateCtypeDigit("123a");   // 数字とアルファベットが混在
demonstrateCtypeDigit(" 123 ");  // スペースが含まれる

// 4. 空文字列
demonstrateCtypeDigit("");

// ----------------------------------------
// 補足情報
// ----------------------------------------
echo "\n--- 補足情報 ---\n";
echo "ctype_digit() は、厳密に '0' から '9' の文字のみをチェックします。\n";
echo "負の数や小数点を含む数を数値として検証したい場合は、\n";
echo "is_numeric() 関数を使用することを検討してください。\n";
echo "例: is_numeric('-123') は TRUE を返します。\n";
echo "例: is_numeric('1.23') は TRUE を返します。\n";

?>

PHPのctype_digit関数は、引数として渡された文字列がすべて数字('0'から'9')で構成されているかを厳密にチェックし、その結果を真偽値(trueまたはfalse)で返します。引数$textには検査したい文字列を指定します。

この関数は、与えられた文字列のすべての文字が厳密に数字である場合にのみtrueを返します。例えば、「12345」や「0」のような文字列はtrueと評価されます。

特に注意が必要な点として、ctype_digitはマイナス記号(-)を数字とはみなしません。そのため、負の数を表す「-123」のような文字列は、falseを返します。同様に、小数点を含む「1.23」、アルファベットを含む「abc」や「123a」、スペースを含む「 123 」、そして空文字列もfalseと評価されます。

数値としての検証ではなく、文字列が純粋な数字の並びであるかを確認したい場合にこの関数は役立ちます。もし負の数や小数を含む文字列を「数値」として判定したい場合は、is_numeric()関数を使用することを検討してください。例えば、is_numeric('-123')is_numeric('1.23')trueを返します。

ctype_digit()関数は、文字列が「0」から「9」の数字のみで構成されているかを厳密にチェックします。この関数では、マイナス記号「-」は数字とは見なされません。そのため、「-123」のような負の数や、「1.23」のような小数点を含む文字列、スペース、アルファベット、あるいは空文字列に対しても常にFALSEが返されます。数字以外の文字が一つでも含まれるとFALSEとなる点を理解しておくことが重要です。負の数や小数点を含む文字列を数値として検証したい場合は、is_numeric()関数を使用することを検討してください。is_numeric()は「-123」や「1.23」のような文字列をTRUEと判定し、より広範な数値のチェックに適しています。

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