Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】ctype_graph()関数の使い方

ctype_graph関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

ctype_graph関数は、指定された文字列に含まれるすべての文字が、空白文字ではない印字可能な文字(グラフィック文字)であるかを判定する関数です。この関数は、引数として検証したい文字列を受け取ります。文字列内の各文字が、ディスプレイに表示できる文字であり、かつスペースやタブのような空白文字ではない場合に真(true)を返します。もし文字列に一つでも空白文字や制御文字、あるいは印字不可能な文字が含まれている場合、この関数は偽(false)を返します。例えば、「abcde」や「12345」、「!@#$%」のような文字列はtrueと判定されますが、「abc def」(空白を含む)や「\n」(改行を含む)のような文字列はfalseと判定されます。また、空文字列を渡した場合もfalseを返します。数値が引数として渡された場合は、その数値を文字列に変換してから判定が行われます。この関数は、ユーザーからの入力が期待通りの文字種のみで構成されているかを確認したり、データの中から特定の文字パターンを持つ情報だけを抽出したりする際に役立ちます。例えば、パスワードやユーザー名に空白以外の印字可能な文字のみを許可したい場合などに利用できます。

構文(syntax)

1<?php
2$text = 'HelloWorld123!';
3$isGraph = ctype_graph($text);

引数(parameters)

string $text

  • string $text: チェック対象の文字列

戻り値(return)

bool

指定された文字が印刷可能文字(空白文字以外)であれば true を、そうでなければ false を返します。

サンプルコード

PHP ctype_graph で印字可能文字をチェックする

1<?php
2
3/**
4 * ctype_graph 関数の使用例を示すスクリプト。
5 *
6 * ctype_graph は、与えられた文字列のすべての文字が
7 * 「印字可能文字(空白文字以外)」であるかをチェックします。
8 * 例えば、ユーザー入力が空白や制御文字を含まないことを
9 * 確認する際のバリデーションに役立ちます。
10 */
11function demonstrateCtypeGraph(string $text): void
12{
13    // ctype_graph 関数を呼び出し、結果を真偽値で取得します
14    $isGraph = ctype_graph($text);
15
16    echo "入力文字列: '" . $text . "'\n";
17    echo "  ctype_graph の結果: " . ($isGraph ? "true" : "false") . "\n";
18    echo "  説明: ";
19    if ($isGraph) {
20        echo "文字列のすべての文字が印字可能(空白文字以外)です。\n\n";
21    } else {
22        echo "文字列に空白文字や制御文字が含まれているか、空文字列です。\n\n";
23    }
24}
25
26// --- ctype_graph 関数の動作確認 ---
27
28echo "--- ctype_graph 関数の使用例 ---\n\n";
29
30// 1. すべての文字が印字可能文字の場合(空白なし、制御文字なし)
31demonstrateCtypeGraph("HelloWorld123!");
32
33// 2. 空白文字が含まれる場合
34demonstrateCtypeGraph("Hello World");
35
36// 3. 数字と記号のみで構成される場合(これも印字可能と判定されます)
37demonstrateCtypeGraph("123$%^");
38
39// 4. 改行文字(制御文字)が含まれる場合
40demonstrateCtypeGraph("Hello\nWorld");
41
42// 5. タブ文字(制御文字)が含まれる場合
43demonstrateCtypeGraph("Hello\tWorld");
44
45// 6. 空文字列の場合(ctype_graph は false を返します)
46demonstrateCtypeGraph("");
47
48echo "---------------------------------\n";
49
50?>

PHPのctype_graph関数は、与えられた文字列のすべての文字が「印字可能文字(空白文字を除く)」であるかを判定する際に使用されます。この関数は、引数として検証したい文字列$textを一つ受け取ります。

戻り値は真偽値(bool)で、文字列内のすべての文字が印字可能(空白文字、改行、タブなどの制御文字を含まない)であればtrueを返します。一つでも空白文字や制御文字が含まれる場合、または文字列が空の場合にはfalseを返します。

サンプルコードでは、この関数の挙動を具体的に確認しています。例えば、「HelloWorld123!」のようにすべての文字が印字可能な場合はtrueとなります。「Hello World」のように空白文字を含む場合や、「Hello\nWorld」(改行)、「Hello\tWorld」(タブ)のように制御文字を含む場合はfalseとなります。また、空文字列""falseと判定されます。

この関数は、ユーザーが入力したデータが特定の形式(空白や制御文字を含まない)を満たしているかを確認するバリデーション処理などで役立ちます。これにより、予期しない文字によるシステムの誤動作を防ぐことができます。

ctype_graph関数は、文字列が半角スペースを含まない印字可能な文字のみで構成されているかを判定します。したがって、文字列に半角スペースが含まれる場合や、空文字列の場合にはfalseを返しますので注意が必要です。この関数は、主にユーザー入力から不要な空白文字や制御文字を排除するような、シンプルなバリデーションに適しています。

しかし、ctype_graphは基本的にASCII文字に特化しており、日本語のようなマルチバイト文字を含む文字列に対しては期待通りに動作しません。マルチバイト文字を含む文字列のチェックを行う場合は、mb_*関数群や正規表現など、適切な別の方法を検討してください。利用する際は、その対象がASCII文字範囲の文字列であるかを確認することが重要です。

ctype_graphで印字可能文字をチェックする

1<?php
2
3/**
4 * ctype_graph関数の基本的な使い方を示すサンプルコードです。
5 *
6 * ctype_graphは、指定された文字列のすべての文字が、空白文字以外の印字可能文字であるかどうかをチェックします。
7 * 印字可能文字には、数字、アルファベット、記号が含まれます。
8 * 文字列に空白文字(半角スペース、タブ、改行など)が含まれる場合や、空の文字列の場合、この関数はfalseを返します。
9 *
10 * @param array<string> $testStrings ctype_graphでテストする文字列の配列。
11 */
12function demonstrateCtypeGraph(array $testStrings): void
13{
14    echo "--- ctype_graph関数のデモンストレーション ---" . PHP_EOL;
15    echo "ctype_graphは、文字列が空白文字以外の印字可能文字のみで構成されているかをチェックします。" . PHP_EOL . PHP_EOL;
16
17    foreach ($testStrings as $string) {
18        $result = ctype_graph($string); // ctype_graph関数を呼び出し
19        
20        echo "テスト文字列: '" . $string . "'" . PHP_EOL;
21        echo "  ctype_graphの結果: " . ($result ? "true" : "false") . PHP_EOL;
22
23        if ($string === '') {
24            echo "  理由: 空の文字列は常にfalseを返します。" . PHP_EOL;
25        } elseif (preg_match('/\s/', $string)) {
26            // 文字列に空白文字が含まれるかチェック
27            echo "  理由: 文字列に空白文字が含まれているためfalseを返しました。" . PHP_EOL;
28        } elseif (!$result) {
29            // それ以外でfalseが返された場合の補足(マルチバイト文字など)
30            echo "  理由: 文字列に空白文字以外の非印字可能文字、またはロケールで定義されていない文字が含まれる可能性があります。" . PHP_EOL;
31        } else {
32            echo "  理由: 文字列は空白文字以外の印字可能文字のみで構成されています。" . PHP_EOL;
33        }
34        echo PHP_EOL;
35    }
36
37    echo "--- デモンストレーション終了 ---" . PHP_EOL;
38}
39
40// ctype_graph関数の挙動を確認するための様々なテスト文字列
41$stringsToTest = [
42    "HelloWorld123!", // アルファベット、数字、記号(すべて印字可能、空白なし)
43    "Hello World",    // 半角スペースを含む
44    "12345",          // 数字のみ
45    "  ",             // 半角スペースのみ
46    "!@#$%",          // 記号のみ
47    "",               // 空の文字列
48    "日本語",         // 日本語(マルチバイト文字。通常はfalseを返す)
49    "PHP\tCode",      // タブ文字を含む
50    "Line\nBreak",    // 改行文字を含む
51    "ABCabc",         // アルファベットのみ
52];
53
54// 定義した関数を実行して結果を表示
55demonstrateCtypeGraph($stringsToTest);

PHPのctype_graph関数は、引数として与えられた文字列が、空白文字以外の印字可能文字のみで構成されているかを判定する際に使用します。ここでいう印字可能文字とは、数字、アルファベット、一般的な記号など、画面に表示される文字を指します。

この関数はstring $textという一つの引数を取り、チェック対象の文字列を指定します。そして、判定結果をbool型の真偽値として返します。文字列内のすべての文字が空白文字以外の印字可能文字であればtrueを返し、それ以外の場合はfalseを返します。具体的には、半角スペース、タブ、改行といった空白文字が一つでも含まれる場合や、文字列が空の場合にはfalseとなります。また、日本語のようなASCII範囲外のマルチバイト文字が含まれる場合も、多くの場合falseを返します。

サンプルコードでは、「HelloWorld123!」のように空白を含まない印字可能文字だけの文字列に対してはtrueを返し、「Hello World」(半角スペースを含む)や「」(空の文字列)、「日本語」(マルチバイト文字)に対してはfalseを返す挙動が確認できます。この関数は、ユーザー入力の検証など、特定の形式の文字列のみを受け付けたい場合に役立ちます。

ctype_graph関数は、指定された文字列のすべての文字が、空白文字(半角スペース、タブ、改行など)以外の印字可能文字であるかをチェックします。初心者が注意すべき点として、空の文字列や、半角スペースのみで構成された文字列は常にfalseを返すことを覚えておきましょう。また、日本語のようなマルチバイト文字が含まれる場合も、多くの場合falseと判定されます。これは、ctype_*系の関数が基本的にASCII文字セットを対象としているためです。この関数は、パスワードやユーザー名などの入力値に、予期せぬ空白文字や非印字可能文字が含まれていないかを確認する際に役立ちますが、国際化されたアプリケーションで複雑な文字列検証を行う場合は、より強力な正規表現など他の方法も検討してください。

関連コンテンツ