私は is_int と ctype_digit などを知っていますが、値のすべての文字が数値である場合にのみ true を返すものが必要です。ctype_digit は、科学表記法 (5e4) を使用すると true を返すため、機能しません。
次の場合は true を返す必要があります。
123
1.2
-12
上記以外の場合は動作しません。
これらすべての組み込み関数を使用すると、そのうちの1つでこれを実行できるように見えるため、これを強調しています。みんなありがとう!
私は is_int と ctype_digit などを知っていますが、値のすべての文字が数値である場合にのみ true を返すものが必要です。ctype_digit は、科学表記法 (5e4) を使用すると true を返すため、機能しません。
次の場合は true を返す必要があります。
123
1.2
-12
上記以外の場合は動作しません。
これらすべての組み込み関数を使用すると、そのうちの1つでこれを実行できるように見えるため、これを強調しています。みんなありがとう!
これを試してみませんか?
function is_numbers($value){
if(is_float($value)) return true;
if(is_int($value)) return true;
}
お客様のニーズを正確にサポートする適切な質問が見つかりません。上に投稿した正規表現は、小数と負数の両方をサポートします。ただし、先行ゼロもサポートしています。それらを排除したい場合は、やや複雑になります。
$pattern = '/^-?[0-9]*\.?[0-9]*$/';
echo preg_match($pattern, '-1.234') ? "match" : "nomatch";
// match
echo preg_match($pattern, '-01.234') ? "match" : "nomatch";
// match
echo preg_match($pattern, '1234') ? "match" : "nomatch";
// match
echo preg_match($pattern, '001.234') ? "match" : "nomatch";
// match (leading zeros)
echo preg_match($pattern, '-1 234') ? "match" : "nomatch";
// nomatch (space)
echo preg_match($pattern, '-0') ? "match" : "nomatch";
// match (though this is weird)
echo preg_match($pattern, '1e4') ? "match" : "nomatch";
// nomatch (scientific)
パターンを分解する:
^
文字列の開始-?
文字列の先頭にあるオプションのマイナス[0-9]*
0 個以上の数字が続く\.?
オプションの小数点が続きます[0-9]*
オプションで小数点以下の数字$
文字列の終わり <?php
$tests = array("42",1337,"1e4","not numeric",array(),9.1);
foreach ($tests as $element)
{
if (is_numeric($element))
{
echo "'{$element}' is numeric", PHP_EOL;
}
else
{
echo "'{$element}' is NOT numeric", PHP_EOL;
}
}
?>
私は純粋な数字をチェックするためにこのようなことをします
$var = (string) '123e4'; // number to test, cast to string if not already
$test1 = (int) $var; // will be int 123
$test2 = (string) $test1; // will be string '123'
if( $test2 === $var){
// no letters in digits of integer original, this time will fail
return true;
}
// try similar check for float by casting
return false;