【PHP8.x】ctype_print()関数の使い方
ctype_print関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
『ctype_print関数は、引数として与えられた文字列に含まれるすべての文字が、画面上で実際に表示可能な文字であるかどうかを検査する関数です。ここで言う「表示可能な文字」とは、英字、数字、記号などの印字可能な文字に加えて、スペース文字も含まれます。一方で、改行コードやタブといった制御文字は表示可能な文字とはみなされません。この関数は、文字列が空白、英数字、そして記号のみで構成されている場合に true を返します。もし文字列内に制御文字のような表示不可能な文字が一つでも含まれている場合や、文字列が空である場合には false を返します。引数には文字列だけでなく、ASCIIコードを表す整数値を渡すことも可能で、その場合は対応する1文字が検査対象となります。この関数は、ユーザーが入力したデータに意図しない制御文字が含まれていないかを確認するバリデーション処理などで役立ちます。
構文(syntax)
1<?php 2$text_to_check = "Hello World! 123"; 3$result = ctype_print($text_to_check); 4?>
引数(parameters)
int|string $text
- int|string $text: 印字可能な文字のみで構成されているかチェックする文字列または整数
戻り値(return)
bool
引数で渡された文字列の全ての文字が印字可能な文字(英字、数字、記号)である場合に true を返します。そうでない場合は false を返します。
サンプルコード
PHP ctype_printで印刷可能文字を判定する
1<?php 2 3/** 4 * ctype_print() 関数の使用例を示します。 5 * 6 * この関数は、引数として与えられた文字列のすべての文字が「印刷可能文字」であるかをチェックします。 7 * 印刷可能文字には、英数字、記号、そして空白文字が含まれます。 8 * 制御文字(例: 改行、タブ)は印刷可能文字とはみなされません。 9 * 10 * @param string|int $input チェックする文字列またはASCII値 11 * @return void 12 */ 13function demonstrateCtypePrint(string|int $input): void 14{ 15 // 入力が文字列の場合、表示用に制御文字をエスケープ 16 $displayInput = is_string($input) 17 ? "'" . addcslashes($input, "\0..\x1F\x7F") . "'" 18 : "ASCII " . $input . " ('" . chr($input) . "')"; 19 20 echo "Testing: " . $displayInput . "\n"; 21 22 // ctype_print() 関数を呼び出し、結果を判定 23 if (ctype_print($input)) { 24 echo " Result: All characters are printable.\n"; 25 } else { 26 echo " Result: Contains non-printable characters.\n"; 27 } 28 29 // 戻り値の型と値を明確に表示 30 echo " Return value (bool): " . var_export(ctype_print($input), true) . "\n\n"; 31} 32 33// --- さまざまなケースでの ctype_print() の動作を確認 --- 34 35// 1. すべて印刷可能文字を含む文字列 36demonstrateCtypePrint("Hello World! 123"); 37 38// 2. 空白文字のみを含む文字列 (空白も印刷可能文字) 39demonstrateCtypePrint(" "); 40 41// 3. 空の文字列 (すべての文字が印刷可能とみなされるため true) 42demonstrateCtypePrint(""); 43 44// 4. 改行文字を含む文字列 (改行は印刷可能ではないため false) 45demonstrateCtypePrint("Hello\nWorld!"); 46 47// 5. タブ文字を含む文字列 (タブは印刷可能ではないため false) 48demonstrateCtypePrint("Hello\tWorld!"); 49 50// 6. 日本語(マルチバイト文字)を含む文字列 51// ctype_printはASCII文字セットを基準とするため、マルチバイト文字は通常 false と判定されます。 52demonstrateCtypePrint("こんにちは"); 53 54// 7. ASCII値でテスト (65 は 'A' で印刷可能) 55demonstrateCtypePrint(65); 56 57// 8. ASCII値でテスト (7 はベル文字で印刷不可) 58demonstrateCtypePrint(7); 59 60?>
PHPのctype_print関数は、指定された文字列のすべての文字が「印刷可能文字」であるかをチェックする際に使用されます。この関数は引数として文字列またはASCII値の整数を受け取り、結果を真偽値(trueまたはfalse)で返します。
印刷可能文字とは、キーボードから入力できる英数字、記号、そして空白文字などを指します。これに対し、改行文字(\n)やタブ文字(\t)といった「制御文字」は印刷可能とはみなされません。
例えば、"Hello World! 123"のようにすべての文字が印刷可能な文字列や、空白文字のみの文字列、さらには空の文字列はtrueを返します。しかし、"Hello\nWorld!"のように改行文字を含む文字列や、タブ文字を含む文字列はfalseを返します。
この関数はASCII文字セットを基準として動作するため、"こんにちは"のような日本語(マルチバイト文字)を含む文字列の場合も、一般的にはfalseと判定されます。また、引数にASCII値を直接指定することも可能で、例えばASCII値65('A')はtrue、ASCII値7(ベル文字)はfalseとなります。このように、ctype_printは文字列の内容を素早く検証し、予期しない制御文字などが含まれていないかを確認するのに役立ちます。
ctype_print関数は、引数が文字列の場合、各文字が英数字、記号、空白文字であるかをチェックし、印刷可能文字か判定します。改行やタブなどの制御文字は印刷可能とは見なされません。引数に整数を与えると、そのASCII値に対応する文字をチェックします。
特に注意すべきは、この関数がASCII文字セットに特化しているため、日本語のようなマルチバイト文字を含む文字列は「印刷可能ではない」と判断されやすい点です。また、空の文字列は印刷不能な文字を含まないためtrueを返します。利用する際は、検査対象がASCII文字の範囲内にあるか、またマルチバイト文字の扱いを考慮して使用してください。
PHP ctype_digitで数字を判定する
1<?php 2 3/** 4 * ctype_digit関数の使用例を示すスクリプト。 5 * 6 * ctype_digitは、与えられた文字列のすべての文字が数字(0から9)であるかどうかをチェックします。 7 * 10進数表現の数字のみを'真'と判定し、負の数、浮動小数点数、または他の文字を含む文字列は'偽'と判定します。 8 * 空文字列も'偽'と判定します。 9 */ 10function demonstrateCtypeDigit(): void 11{ 12 echo "--- ctype_digit() の使用例 ---\n"; 13 14 // 1. すべてが数字の文字列 15 $str1 = "12345"; 16 echo "文字列 '{$str1}': " . (ctype_digit($str1) ? "数字のみ" : "数字以外を含む") . "\n"; 17 18 // 2. 数字以外の文字を含む文字列 19 $str2 = "123a45"; 20 echo "文字列 '{$str2}': " . (ctype_digit($str2) ? "数字のみ" : "数字以外を含む") . "\n"; 21 22 // 3. 負の数のように見える文字列(ハイフンは数字ではない) 23 $str3 = "-123"; 24 echo "文字列 '{$str3}': " . (ctype_digit($str3) ? "数字のみ" : "数字以外を含む") . "\n"; 25 26 // 4. 浮動小数点数のように見える文字列(小数点も数字ではない) 27 $str4 = "12.34"; 28 echo "文字列 '{$str4}': " . (ctype_digit($str4) ? "数字のみ" : "数字以外を含む") . "\n"; 29 30 // 5. 空文字列 31 $str5 = ""; 32 echo "文字列 '(空)': " . (ctype_digit($str5) ? "数字のみ" : "数字以外を含む") . "\n"; 33 34 // 6. 全角数字 (これらはASCII数字ではないためfalse) 35 $str6 = "123"; // これは実際には漢字の一部として扱われることが多い 36 echo "文字列 '{$str6}' (全角): " . (ctype_digit($str6) ? "数字のみ" : "数字以外を含む") . "\n"; 37 38 // 7. 整数値(型は文字列にキャストされる) 39 // ctype_*関数は文字列を期待するため、整数を渡すと内部で文字列に変換されます。 40 // その結果、「123」として評価されます。 41 $num = 123; 42 echo "数値 {$num}: " . (ctype_digit($num) ? "数字のみ" : "数字以外を含む") . "\n"; 43 44 // 8. 負の整数値(文字列に変換されると "-123" となり、ハイフンのためfalse) 45 $negativeNum = -123; 46 echo "数値 {$negativeNum}: " . (ctype_digit($negativeNum) ? "数字のみ" : "数字以外を含む") . "\n"; 47 48 // 9. 浮動小数点数値(文字列に変換されると "12.34" となり、小数点のた めfalse) 49 $floatNum = 12.34; 50 echo "数値 {$floatNum}: " . (ctype_digit($floatNum) ? "数字のみ" : "数字以外を含む") . "\n"; 51 52 echo "\n注意: ctype_digit() はASCIIの '0' から '9' の文字のみを検査します。\n"; 53 echo " 負の数、浮動小数点数、全角数字などは『数字ではない』と判定されます。\n"; 54} 55 56// 関数の実行 57demonstrateCtypeDigit(); 58
PHP 8のctype_digit関数は、文字列がすべてASCIIの数字(0から9)で構成されているかを判別します。引数には整数または文字列を受け取り、真偽値(true/false)を返します。入力値が純粋な数字文字列であるかを確認する際に有用です。
具体的には、「12345」のような数字のみの文字列にはtrueを返しますが、「123a45」のように数字以外の文字が含まれる場合、あるいは「-123」のような負の数を表すハイフン、「12.34」のような小数点を表すピリオドが含まれる場合はfalseとなります。空文字列や「123」のような全角数字もASCIIの数字ではないためfalseと判断されます。引数に整数値を渡した場合、関数は内部でその値を文字列に変換して検査します。そのため、負の整数や浮動小数点数も文字列化された際に数字以外の文字が含まれると見なされ、falseが返されます。本関数は、厳密にASCIIの数字のみを検査します。
ctype_digit関数は、引数として渡された文字列が全てASCII文字の'0'から'9'で構成されている場合にのみ真を返します。システムエンジニアを目指す初心者の方は、特に以下の点に注意してください。マイナスの符号や小数点、全角数字、スペースなどの非数字文字が一つでも含まれると偽となります。例えば、"-123"や"12.34"、"123"は数字ではないと判定されます。空文字列も偽を返します。引数に整数値が渡された場合、PHP内部で自動的に文字列に変換されてから検証が行われます。この関数は「文字列が純粋な数字文字のみで構成されているか」を厳密にチェックするために使用されます。負の数や浮動小数点数など、より広範な「数値」として扱いたい場合は、is_numeric()関数など他の検証方法を検討してください。