1. ホーム
  2. php

[解決済み] 文字列がintであり、doubleなどでないことを確認するにはどうしたらよいですか?

2022-05-06 13:42:07

質問

PHPは intval() 関数は、文字列を整数に変換します。しかし、文字列が整数であることを事前にチェックし、間違っている場合にはユーザーに親切なエラーメッセージを表示できるようにしたい。PHPには is_int() のような文字列の場合、false を返します。 "2" .

PHPは is_numeric() 関数がありますが、これは数値がdoubleであればtrueを返します。doubleの場合はfalseを返し、intの場合はtrueを返すようなものが欲しい。

などです。

my_is_int("2") == TRUE
my_is_int("2.1") == FALSE

解決方法は?

を使ってはどうでしょうか。 ctype_digit ?

マニュアルより

<?php
$strings = array('1820.20', '10002', 'wsl!12');
foreach ($strings as $testcase) {
    if (ctype_digit($testcase)) {
        echo "The string $testcase consists of all digits.\n";
    } else {
        echo "The string $testcase does not consist of all digits.\n";
    }
}
?>

上記の例では、出力されます。

1820.20という文字列はすべての数字で構成されていない。
文字列10002はすべての数字で構成されている。
文字列 wsl!12 はすべての数字で構成されていない。

これは、入力が常に文字列である場合にのみ機能します。

$numeric_string = '42';
$integer        = 42;

ctype_digit($numeric_string);  // true
ctype_digit($integer);         // false

入力が以下のようなタイプである場合 int というように ctype_digit is_int .

負の数が気になる場合は、入力に先行する - を呼び出し、もしそうなら ctype_digit を使用します。 substr を入力文字列の こんな感じでいいんじゃないでしょうか。

function my_is_int($input) {
  if ($input[0] == '-') {
    return ctype_digit(substr($input, 1));
  }
  return ctype_digit($input);
}