我知道 is_int 和 ctype_digit 以及其他类似的东西,但我需要一个只有当值中的所有字符都是数字时才会返回 true 的。如果您使用科学记数法 (5e4),ctype_digit 将返回 true,因此这将不起作用。
在以下情况下必须返回 true:
123
1.2
-12
如果有上述以外的任何东西,将无法正常工作。
我之所以强调这一点,是因为似乎所有内置函数中的一个都能够做到这一点。非常感谢你们!
我知道 is_int 和 ctype_digit 以及其他类似的东西,但我需要一个只有当值中的所有字符都是数字时才会返回 true 的。如果您使用科学记数法 (5e4),ctype_digit 将返回 true,因此这将不起作用。
在以下情况下必须返回 true:
123
1.2
-12
如果有上述以外的任何东西,将无法正常工作。
我之所以强调这一点,是因为似乎所有内置函数中的一个都能够做到这一点。非常感谢你们!
你为什么不试试这个?
function is_numbers($value){
if(is_float($value)) return true;
if(is_int($value)) return true;
}
<?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;
我找不到合适的问题,其答案完全支持您的需求。我在上面发布的正则表达式将同时支持小数和负数。但是,它也支持前导零。如果你想消除这些,它会变得更加复杂。
$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]*
并且可选小数点后的数字$
字符串的结尾