-2

私は is_int と ctype_digit などを知っていますが、値のすべての文字が数値である場合にのみ true を返すものが必要です。ctype_digit は、科学表記法 (5e4) を使用すると true を返すため、機能しません。

次の場合は true を返す必要があります。

123
1.2
-12

上記以外の場合は動作しません。

これらすべての組み込み関数を使用すると、そのうちの1つでこれを実行できるように見えるため、これを強調しています。みんなありがとう!

4

4 に答える 4

1

これを試してみませんか?

function is_numbers($value){
   if(is_float($value)) return true;
   if(is_int($value)) return true;
}
于 2012-10-25T02:39:40.270 に答える
0

お客様のニーズを正確にサポートする適切な質問が見つかりません。上に投稿した正規表現は、小数と負数の両方をサポートします。ただし、先行ゼロもサポートしています。それらを排除したい場合は、やや複雑になります。

$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]*オプションで小数点以下の数字
  • $文字列の終わり
于 2012-10-25T11:07:55.907 に答える
0
    <?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;
          }

       }
    ?>
于 2012-10-25T02:40:16.687 に答える
0

私は純粋な数字をチェックするためにこのようなことをします

$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;
于 2012-10-25T02:42:13.200 に答える