我知道is_int和ctype_digit以及其他类似的东西,但我需要一个仅返回true且仅在 所有 值中的字符为数字的字符。 ctype_digit将返回true,你使用科学记数法(5e4),这样就无法使用了。
如果符合以下条件,则必须返回true:
123
1.2
-12
如果除上述内容之外的任何内容,将无法正常工作。
我强调这是因为看起来所有那些内置功能的人都可以做到这一点。非常感谢你们!
答案 0 :(得分:1)
你为什么不尝试这个?
function is_numbers($value){
if(is_float($value)) return true;
if(is_int($value)) return true;
}
答案 1 :(得分: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;
}
}
?>
答案 2 :(得分: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;
答案 3 :(得分: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]*
以及小数点后的数字$
字符串结尾