以下函数应该允许空的空字段通过测试,允许正整数通过测试,如果字段包含任何字母则测试失败:
function fnValidatePositiveInteger($v)
{
return (!empty($v) and (!is_numeric($v) or $v < 0 or $v != round($v))) ? 0 : 1;
}
但是,它的行为方式如下:它允许空字段通过测试,它允许正整数通过测试,但它也允许包含字母的字段通过而不应该通过。如何解决这个问题?
答案 0 :(得分:0)
使用filter_var()
和范围检查数字是否为正整数
function fnValidatePositiveInteger($v)
{
$is_int = filter_var($v, FILTER_VALIDATE_INT, array(
'options' => array('min_range' => 1)
));
return $v == '' || $is_int;
}
测试用例:
var_dump(fnValidatePositiveInteger('')); // bool(true)
var_dump(fnValidatePositiveInteger(42)); // bool(true)
var_dump(fnValidatePositiveInteger(-50)); // bool(false)
var_dump(fnValidatePositiveInteger('Ab')); // bool(false)
答案 1 :(得分:0)
试试这个,
function fnValidatePositiveInteger($v)
{
return (!empty($v) and (!preg_match('/^[0-9]+$/', $v) or $v < 0 or $v != round($v))) ? 0 : 1;
}