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

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

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

作成日: 更新日:

基本的な使い方

ctype_punct関数は、引数で指定された文字が「句読点」であるかどうかを判別する関数です。この関数は、与えられた文字がASCII文字セットにおいて印刷可能であり、かつ英数字(アルファベットや数字)でも空白文字でもない場合に「句読点」と判断します。具体的には、感嘆符(!)、カンマ(,)、ピリオド(.)、括弧(())、ハイフン(-)などの記号がこれに該当します。

主に、文字列の中から特定の記号を識別したい場合や、ユーザーからの入力値を検証する際に、句読点の有無を確認したい場面で利用されます。例えば、パスワードに特定の記号を必須としたり、入力された文章から句読点を取り除きたい場合などに便利です。

この関数は、検査したい文字を引数として受け取ります。引数に渡された文字が句読点であると判断された場合、true(真)を返します。そうでない場合はfalse(偽)を返します。

注意点として、引数に複数の文字を含む文字列を渡した場合、この関数はその文字列の最初の1文字のみを検査します。また、空の文字列を引数として渡すと、常にfalseが返されます。システムエンジニアを目指す初心者の方々にとっては、文字列処理や入力値のサニタイズを行う際に、特定の文字種を判別する基本的なツールとして役立つでしょう。

構文(syntax)

1<?php
2var_dump(ctype_punct('!'));
3var_dump(ctype_punct('a'));
4var_dump(ctype_punct(' '));
5var_dump(ctype_punct('?'));
6?>

引数(parameters)

string|int $text

  • string|int $text: パンクチュエーション文字(句読点など)であるかを判定したい文字列または整数

戻り値(return)

bool

与えられた文字列が句読点文字のみで構成されている場合に true を返します。それ以外の場合は false を返します。

サンプルコード

ctype_punctで句読点チェックする

1<?php
2
3/**
4 * ctype_punct 関数の使用例
5 *
6 * ctype_punct() は、与えられた文字列のすべての文字が句読点文字であるかどうかをチェックします。
7 * 句読点文字とは、印字可能な文字のうち、数字でも英字でも空白文字でもない文字を指します。
8 * 例えば、!, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, ~ などです。
9 *
10 * @param string $text チェックする文字列
11 * @return bool すべての文字が句読点文字であれば true、そうでなければ false を返します。
12 */
13
14// さまざまな文字列で ctype_punct() の動作をテストします。
15$testStrings = [
16    '!',           // 単一の句読点文字
17    '.,-;',        // 複数の句読点文字の組み合わせ
18    '!@#$%',       // 一般的な句読点記号
19    'Hello!',      // 英字と句読点文字 (falseを期待)
20    '123',         // 数字のみ (falseを期待)
21    ' ',           // 空白文字 (falseを期待、句読点ではない)
22    'PHP',         // 英字のみ (falseを期待)
23    '',            // 空文字列 (falseを期待、PHP 8 の挙動)
24    '!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~', // ほとんどの標準的な句読点文字
25];
26
27echo "ctype_punct() 関数のテスト結果:\n\n";
28
29foreach ($testStrings as $text) {
30    // ctype_punct() を呼び出して結果を取得します。
31    $isPunctuation = ctype_punct($text);
32
33    // 結果を分かりやすく表示します。
34    echo "文字列: '" . $text . "'\n";
35    echo "結果: " . ($isPunctuation ? 'true' : 'false') . "\n";
36    echo "---------------------------------\n";
37}
38
39?>

PHPのctype_punct関数は、与えられた文字列のすべての文字が句読点文字であるかを判別する機能を提供します。この関数はPHP 8で利用できます。

句読点文字とは、キーボードで入力可能な文字のうち、数字(0-9)、英字(a-z, A-Z)、そして空白文字以外の印字可能な文字を指します。例えば、感嘆符「!」、引用符「"」、シャープ「#」、ドル記号「$」、カンマ「,」、ピリオド「.」などが句読点文字に該当します。

ctype_punct関数は、チェックしたい文字列または文字コードを表す整数を$text引数として受け取ります。

戻り値は真偽値(trueまたはfalse)です。指定された文字列のすべての文字が句読点文字であった場合にtrueを返します。一つでも英字、数字、空白文字などが含まれている場合や、文字列が空である場合はfalseを返します。例えば、「!@#$%」のような文字列ではtrueを返しますが、「Hello!」のように英字が含まれる場合や、「123」のような数字のみの文字列、「 」のような空白文字のみの文字列、また空文字列「''」ではfalseとなります。

この関数は、ユーザーが入力したデータに特定の記号だけが含まれているかを確認したい場合など、文字列の形式を検証する場面で役立ちます。

ctype_punct関数は、与えられた文字列のすべての文字が句読点文字であるかを確認します。句読点文字とは、印字可能な文字のうち、数字、英字、空白文字のいずれでもない文字を指します。

この関数を利用する際の注意点として、引数には主に文字列を渡して使用します。空白文字は句読点には含まれないため、空白文字のみの文字列を渡すとfalseが返されます。また、数字や英字のみの文字列もfalseとなります。

特にPHP 8以降では、空文字列を渡した場合にもfalseを返すようになりました。この挙動は以前のバージョンと異なるため、PHP 8環境での利用時には特に留意してください。文字列のすべての文字が定義された句読点文字である場合にのみtrueが返される、と理解しておくと安全です。

PHP ctype_punctで句読点判定する

1<?php
2
3/**
4 * ctype_punct 関数の使用例を示す関数です。
5 *
6 * ctype_punct は、与えられた文字列のすべての文字が句読点文字であるかどうかをチェックします。
7 * 句読点文字とは、アルファベット、数字、空白文字、制御文字以外の印字可能な文字を指します。
8 * (例: !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, ~)
9 * この関数はASCII文字セットに基づいて判定を行い、ロケール設定には影響されません。
10 *
11 * @param string|int $text チェック対象の文字列、またはASCIIコードに対応する整数。
12 * @return void
13 */
14function demonstrateCtypePunctExample(string|int $text): void
15{
16    // 入力の型に応じて説明を生成
17    $inputDescription = is_int($text) ? "数値 (ASCIIコード: {$text})" : "文字列: '{$text}'";
18
19    // ctype_punct 関数を実行
20    $result = ctype_punct($text);
21
22    echo "--- " . $inputDescription . " ---\n";
23    if ($result) {
24        echo "  判定結果: TRUE - すべての文字が句読点文字です。\n";
25    } else {
26        echo "  判定結果: FALSE - すべての文字が句読点文字ではありません。\n";
27    }
28    echo "\n";
29}
30
31// --- ctype_punct 関数のさまざまな使用例 ---
32
33// 1. 句読点文字のみで構成される文字列の例
34demonstrateCtypePunctExample("!");
35demonstrateCtypePunctExample("...");
36demonstrateCtypePunctExample("?@#$");
37
38// 2. 句読点文字以外の文字を含む文字列の例
39demonstrateCtypePunctExample("Hello!");      // アルファベットを含む
40demonstrateCtypePunctExample("123.");       // 数字を含む
41demonstrateCtypePunctExample(" This ");     // 空白文字を含む (ctype_space とは異なる判定)
42demonstrateCtypePunctExample("これはテストです。"); // 日本語文字 (ASCII範囲外)
43
44// 3. int型(ASCIIコード)を引数として渡す例
45// ctype_punct(33) は '!' のASCIIコードであり、句読点です
46demonstrateCtypePunctExample(33);
47
48// ctype_punct(65) は 'A' のASCIIコードであり、句読点ではありません
49demonstrateCtypePunctExample(65);
50
51// ctype_punct(32) は ' ' (スペース) のASCIIコードであり、句読点ではありません
52demonstrateCtypePunctExample(32);

PHPのctype_punct関数は、文字列やASCIIコードで指定された文字が「句読点文字」であるかを判定するために使用されます。句読点文字とは、アルファベット、数字、空白文字、制御文字以外の印字可能な文字を指し、具体的には!, ", #, $, %, &などの記号類がこれに該当します。

この関数は、引数として渡された文字列内のすべての文字が句読点文字である場合にTRUEを返し、一つでも句読点以外の文字(アルファベット、数字、空白文字、日本語など)が含まれていればFALSEを返します。引数には文字列の他に、ASCIIコードに対応する整数を指定することも可能です。整数が渡された場合は、そのASCIIコードが示す単一の文字が句読点であるか判定されます。戻り値は常に真偽値(bool)です。

ctype_punctの判定はASCII文字セットに基づいて行われ、ロケール設定には影響されません。サンプルコードでは、!, ..., ?@#$のような文字列やASCIIコード33!)がTRUEとなる一方で、アルファベットを含むHello!, 数字を含む123., 空白を含むThis、日本語を含むこれはテストです。、そしてASCIIコード65A)や32(スペース)はFALSEとなる様子が示されており、この関数の具体的な挙動を理解できます。

ctype_punct関数は、引数として与えられた文字列のすべての文字、または単一のASCIIコード(整数)が句読点文字であるかを真偽値で判定します。句読点文字とは、アルファベット、数字、空白文字、制御文字以外の印字可能なASCII文字を指します。特に、空白文字は句読点には含まれませんので、ctype_space関数とは判定が異なる点に注意が必要です。日本語などのASCII範囲外のマルチバイト文字は句読点とみなされません。引数に整数を渡す際は、それが句読点文字のASCIIコードに対応しているか確認してください。文字列に句読点以外の文字が一つでも含まれるとFALSEを返すため、対象文字列の文字種をよく確認して利用することが重要です。

関連コンテンツ