定義と使い方
- PHPバージョン
- 4.0.4+
ctype_digit()関数は、与えられた文字列が0から9までの数字のみで構成されているかを確認します。プロパティとして渡された文字列がすべて数字で構成されていればtrueを返し、そうでなければfalseを返します。
特徴
- 空白文字は数値ではないものとして解釈されます。
- 空の文字列(
'')は数値ではないものとして解釈されます。 '3.14'のような浮動小数点数(float型)は、数値に.記号が含まれている文字列であるため、数値ではないものとして解釈されます。'-123'のように負の整数といった、数値に-などの符号が含まれている文字列は、数値ではないものとして解釈されます。- PHP 8.1.0 より前は文字列ではない引数を渡すことができましたが、PHP 8.1.0 からは文字列ではない引数を渡すことは推奨されなくなりました。
基本例
var_dump(ctype_digit('1234')); // bool(true)
var_dump(ctype_digit('0123')); // bool(true)
var_dump(ctype_digit(' 123 ')); // bool(false)
var_dump(ctype_digit('3.14')); // bool(false)
var_dump(ctype_digit('-123')); // bool(false)
var_dump(ctype_digit('')); // bool(false)
/* PHP 8.1.0 からは、文字列ではない引数を渡すことはサポートされなくなりました。 */
var_dump(ctype_digit(123)); // bool(false)
var_dump(ctype_digit(1e3)); // bool(false)
この関数の関連関数を参考にしてください。
構文
ctype_digit(mixed $text): bool
引数
$text |
必須。すべての文字が数字であるかを確認する文字列 |
|---|
参考事項
ctype_digit()関数はASCII文字コードを基準に数字であるかを判断し、ASCII文字コードには0から9までの数字のみが含まれています。ASCII文字の範囲は0x00から0x7Fまで計128個の文字を含みますが、0から9までの数字もここに含まれます。
ただし、引数として渡される値が整数である場合は必ず次の内容を参考にしてください。
引数として渡される値として-128から255の範囲の整数が提供された場合、これは一つの文字のASCII値として解釈されます。つまり、該当する整数が文字列に変換されるということを意味します。
/* int型、ASCII範囲(-128から255までの整数)内の整数 */
$x = 65; // -128から255までの整数である65は、文字「A」のASCII値とみなされます
var_dump(ctype_digit($x)); // bool(false) => 文字列「A」とみなされます
/* int型、ASCII範囲(-128から255までの整数)外の整数 */
$y = 1234; // -128から255以外の整数である1234は、文字列に変換された「1234」とみなされます
var_dump(ctype_digit($y)); // bool(true) => 文字列「1234」とみなされます
上記のサンプルコードについて説明します。
$x = 65の場合
-128から255までの整数である65はASCII値とみなされます。したがって、これは文字列'A'のASCII値と一致します。- したがって、引数として渡される値は
'A'とみなされます。 - したがって、引数として渡された
'A'という文字列は数字のみで構成されていないため、falseを返します。
$y = 1234の場合
- 整数
1234は-128から255までの範囲の整数ではないため、一つの文字のASCII値として解釈されない元の整数1234です。 - 文字列を引数として期待する
ctype_digit()関数に整数1234が渡されると、該当する整数は文字列に変換され、'1234'とみなされます。 - したがって、引数として渡された
'1234'という文字列は数字のみで構成されているため、trueを返します。
PHP 8.1.0以降の変更事項
PHP 8.1.0からは、ctype_digit()関数に文字列ではない引数を渡すことは推奨されなくなりました。
戻り値
引数として渡された文字列がすべて数字で構成されていればtrueを返し、そうでなければfalseを返します。
注意点
ctype_digit()関数を使用する際に注意すべき点があります。
引数を文字列に変換して使用すること
前述の通り、-128から255の範囲内の整数値である場合には、意図しない結果が発生することになります。また、PHP 8.1.0からはctype_digit()関数に文字列ではない引数を渡すことはサポートされなくなったため、引数として使用する値は文字列に変換してから使用する必要があります。
$x = 65;
var_dump(ctype_digit($x)); // false (意図しない結果)
var_dump(ctype_digit((string)$x)); // true
trim()関数を使用して文字列の前後にある空白を削除する
ctype_digit()関数は空白文字を数字として判断しません。ctype_digit()関数をより厳密に適用するためには、与えられた文字列の前後に空白が含まれている可能性があるため、trim()関数を使用して前後の空白を削除することをおすすめします。これにより、文字列に空白が含まれていても、数字のみで構成された文字列であるかどうかを正確に確認することができます。
補足説明trim()関数は、文字列の両端から空白または引数で指定された文字列を除去(trim)する関数です。
$var = ' 123 ';
var_dump(ctype_digit($var)); // false
var_dump(ctype_digit(trim($var))); // true
活用例
ctype_digit()関数は、次のような場合に使用すると便利、または有用です。
ユーザー入力のチェック
フォームの入力値チェックにおいて、ユーザーが数字のみを入力するように制限する場合に有用です。
$user_input = trim($_POST['age']);
if (ctype_digit($user_input)) {
// 入力が数字のみで構成されていれば処理します。
$age = intval($user_input); // 数値に変換して使用できます
echo "年齢は{$age}歳です。";
} else {
echo "年齢は数字で入力してください。";
}
コードの補足説明intval()関数は、引数として渡された値を整数に変換して返します。
関連項目
- PHP gettype()関数:変数のデータ型を文字列で確認する
- PHP is_bool()関数:変数の論理型(boolean)を確認
- PHP is_int()関数:変数の整数(integer)型を確認
- PHP is_float()関数:変数の浮動小数点数(float)型確認
- PHP is_numeric()関数:変数の値が数値または数値形式の文字列であるかを確認
- PHP is_string()関数:変数の文字列(string)タイプ確認
- PHP is_array()関数:変数の配列(array)タイプ確認
- PHP is_object()関数:変数のオブジェクト(object)タイプ確認
- PHP is_resource()関数:変数のリソース(resource)タイプ確認
- PHP is_null()関数:変数のNULLタイプ確認