【问题标题】:PHP: Validation for required fieldPHP:验证必填字段
【发布时间】:2014-12-01 21:32:04
【问题描述】:

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

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

但是如果我在字段中写0,它仍然会说该字段是必需的。 empty() 函数将 0 视为 PHP 手册中所述的空值,但我还应该做什么?我试过写很多条件,但都没有按预期工作。

看到用户投稿后发现:

empty($var) && !is_bool($var)

我尝试像这样将它添加到我的条件中,但没有奏效:

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

【问题讨论】:

  • 当你var_dump它时,$value中实际保存了什么?
  • 您要验证的变量是什么类型的?
  • @ParagTyagi 我正在制作自己的高级验证课程。没有一个值,我正在为整数类型值和字符串类型值编写单个条件。
  • 只是一个旁注,这个表达式是多余的:isset($value) && !empty($value)。 empty() 还会检查变量是否已设置,因此无需进行 isset() 检查。
  • @VladCazacu isset 检查变量是否设置 & 不为空,而为空检查变量不为空。

标签: php


【解决方案1】:

试试下面的代码:

$value = 0;

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


输出:

字段不需要


演示:

http://3v4l.org/JWJbj


说明:

整数0是真实。这意味着任何以 boolean'ish 方式检查它的东西都会将其视为错误。特别是,!empty($value) 将评估为 false,因此 is_numeric 甚至永远不会有失败的机会。

短版:在这种情况下,empty 太虚无缥缈。明确检查null''(数据类型因此使用!==)。

【讨论】:

    【解决方案2】:

    您无法检查是否为空。基本上你只能坚持isset测试。

    如果表单中的某个字段未填写,则该变量字段将不在 $_POST 超全局变量中,并且 isset 将返回 false。如果用户输入 0 变量名将存在于 $_POST 中 isset 将返回 true。

    【讨论】:

      【解决方案3】:

      我会这样做:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 小心空格。
        【解决方案5】:

        您可以将空函数替换为:

        $value !== ""
        

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

            试试

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

            【讨论】:

              【解决方案8】:

              我自己找到了一个不错的条件。

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

              这对每种情况都适用。

              【讨论】:

                【解决方案9】:

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

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-05-23
                  • 2013-03-23
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-08-14
                  • 2015-12-29
                  相关资源
                  最近更新 更多