PHP:必填字段的验证

PHP:必填字段的验证,php,Php,我想验证一个必填字段。我使用以下条件检查字段是否为空: isset($value) && !empty($value) 但是如果我在字段中写入0,它仍然会说该字段是必需的。empty()?我试过写很多条件,但都没有达到预期效果 我看到了用户的贡献,发现: empty($var) && !is_bool($var) 我试着像这样将其添加到我的病情中,但没有成功: isset($value) && !empty($value) &&

我想验证一个必填字段。我使用以下条件检查字段是否为空:

isset($value) && !empty($value)
但是如果我在字段中写入
0
,它仍然会说该字段是必需的。
empty()?我试过写很多条件,但都没有达到预期效果

我看到了用户的贡献,发现:

empty($var) && !is_bool($var)
我试着像这样将其添加到我的病情中,但没有成功:

isset($value) && !empty($value) && is_bool($value)

你不能检查是否有空的。基本上你只能坚持isset测试


如果表单中的某个字段未填写,则此变量字段将不在$\u POST superglobal中,并且isset将返回false。如果用户键入0,变量名将存在于$\u POST isset中,它将返回true。

我将按照以下方式执行:

function emptyTextValue($value)
{
    return trim((string) $value) !== '';
}

您知道得到的只是一个字符串,因此不需要empty()函数的全部功能:

isset($_POST['yourFieldName']) && $_POST['yourFieldName'] !== ''

您可以通过以下方式替换空函数:

$value !== ""

如果它不是完全空的,那么它将验证条件。

我为测试所做的是将空检查转换为strlen检查。因为PHP非常友好,所以可以对值运行字符串比较。null值将返回长度为0的字符串,而0值将返回长度为1的字符串。所以我所做的是:

if(isset($val) && strlen($val) > 0){
    // Do stuff
}

尝试以下代码:

$value = 0;

if(isset($value) && $value !== "")
{
    echo "Field not required";
}
else
{
    echo "Field required";
}

输出:

$value = 0;

if(isset($value) && $value !== "")
{
    echo "Field not required";
}
else
{
    echo "Field required";
}
字段不是必需的


演示:

$value = 0;

if(isset($value) && $value !== "")
{
    echo "Field not required";
}
else
{
    echo "Field required";
}


说明:

$value = 0;

if(isset($value) && $value !== "")
{
    echo "Field not required";
}
else
{
    echo "Field required";
}
整数0是真实的。这意味着任何以布尔方式检查它的东西都会将其视为false。特别是,
!空($value)
将计算为
false
,因此is\u numeric甚至不会有失败的机会

短版:在这种情况下,空版太松散了。明确检查
null
'
(因此使用了数据类型
!=
)。

试试看

isset($value) && $value != ''

我自己发现了一个很好的条件

$value === 0 || $value === "0" ? isset($value) : isset($value) && !empty($value)

这适用于所有情况。

我会检查表单是否已提交,然后修剪字段“msg”,以防出现任何空白字符,即换行符、回车符、制表符、空格,然后测试结果以确保不是空字符串,如下所示:

<?php
if ( isset($_POST['msg']) && trim($_POST['msg']) !== '') {

    // other code

}

当您
var\u dump
it时,
$value
中实际保存了什么?您试图验证的变量是什么类型的?@ParagTyagi我正在创建自己的高级验证类。没有一个值,我正在为整型值和字符串型值编写一个条件。只是一个旁注,这个表达式是多余的:isset($value)&&!空($value)。empty()还检查变量是否已设置,因此无需执行isset()检查。@VladCazacu isset检查变量是否已设置且不为null,而empty检查变量是否为null。请注意空格。