PHP is_numeric验证没有捕捉字母

时间:2013-12-23 09:59:37

标签: php validation

以下函数应该允许空的空字段通过测试,允许正整数通过测试,如果字段包含任何字母则测试失败:

function fnValidatePositiveInteger($v)
{
    return (!empty($v) and (!is_numeric($v) or $v < 0 or $v != round($v))) ? 0 : 1;
}

但是,它的行为方式如下:它允许空字段通过测试,它允许正整数通过测试,但它也允许包含字母的字段通过而不应该通过。如何解决这个问题?

2 个答案:

答案 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;
}