-2

我知道 is_int 和 ctype_digit 以及其他类似的东西,但我需要一个只有当值中的所有字符都是数字时才会返回 true 的。如果您使用科学记数法 (5e4),ctype_digit 将返回 true,因此这将不起作用。

在以下情况下必须返回 true:

123
1.2
-12

如果有上述以外的任何东西,将无法正常工作。

我之所以强调这一点,是因为似乎所有内置函数中的一个都能够做到这一点。非常感谢你们!

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
    <?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 回答
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-9]*并且可选小数点后的数字
  • $字符串的结尾
于 2012-10-25T11:07:55.907 回答