检查变量是否为空或空字符串的更好方法?

All*_*nde 168 php validation

由于PHP是一种动态语言,检查提供的字段是否为空的最佳方法是什么?

我想确保:

  1. null被视为空字符串
  2. 仅限空白字符串被视为空
  3. "0"不算空

这是我到目前为止所得到的:

$question = trim($_POST['question']);

if ("" === "$question") {
    // Handle error here
}
Run Code Online (Sandbox Code Playgroud)

必须有一种更简单的方法吗?

Mic*_*ren 268

// Function for basic field validation (present and neither empty nor only white space
function IsNullOrEmptyString($str){
    return (!isset($str) || trim($str) === '');
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然这解决了它,但我不确定它是否更简单.+1无论如何 (7认同)
  • 这里的目的是什么?isset()?与is_null()有什么不同? (6认同)
  • 由于OP要求一个非常简单的操作的"更简单"版本,我将说"更好"是实际需要的. (4认同)
  • 我把它变成了一个功能.这应该使您的验证代码更简单 (2认同)
  • 也返回 (!empty($question) || trim($question)===''); (2认同)
  • 纠正我之前的评论(右括号放错位置):可以简单地执行`return trim($question)==='';` (2认同)

小智 106

老帖子,但有人可能需要它,因为我做;)

if (strlen($str) == 0){
do what ever
}
Run Code Online (Sandbox Code Playgroud)

替换$str你的变量. NULL并且""在使用时都返回0 strlen.

  • @Noumenon因为这会在不解决任何问题的情况下损害可读性.很容易将你的建议读作"如果有一个长度",而它(当然)意味着相反. (14认同)
  • 为什么== 0而不仅仅是(strlen($ str))? (12认同)
  • 如果有人关心的话,对于只有空格的字符串是无济于事的 (10认同)
  • 并且总是:`if(strcmp('',$ var)== 0)......` (4认同)
  • 如果未设置变量,则会产生警告 (4认同)
  • @DanMorphis - 除非你**不应该在OP请求的情况下使用`empty()`**,因为这对于诸如`'0'`和`'0.0'`这样的字符串是不正确的(将是`false` ,但 OP 希望包含内容的字符串为“true”)。 (3认同)
  • 如果启用了 `declare(strict_types=1);`,如果 $var 为 null,您将收到错误消息。您必须执行 `$var === null || strlen($var) === 0`,或使用`empty($var)` (2认同)

kta*_*kta 29

使用PHP的empty()函数.以下事项被认为是空的

"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
$var; (a variable declared, but without a value)
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请检查空功能

  • 张贴者说,他们不想将“ 0”视为空 (5认同)
  • 谁支持这个答案?首先阅读问题。 (2认同)

Ada*_*dal 19

如果我错了,我会谦卑地接受,但我在自己的测试结果中发现以下内容适用于测试字符串(0)""和NULL值变量:

if ( $question ) {
  // Handle success here
}
Run Code Online (Sandbox Code Playgroud)

这也可以反过来测试成功如下:

if ( !$question ) {
  // Handle error here
}
Run Code Online (Sandbox Code Playgroud)

  • 对于“0”、数字 0 或 0.0 以及 FALSE,这将返回 false。 (6认同)

Ben*_*ank 7

注意trim()函数的假阴性- 它在修剪之前执行一个转换为字符串,因此如果你传递一个空数组,它将返回例如"Array".这可能不是问题,取决于您处理数据的方式,但是使用您提供的代码,question[]可以在POST数据中提供名为的字段,并且该字段看起来是非空字符串.相反,我会建议:

$question = $_POST['question'];

if (!is_string || ($question = trim($question))) {
    // Handle error here
}

// If $question was a string, it will have been trimmed by this point
Run Code Online (Sandbox Code Playgroud)


dev*_*bmw 5

到 2023 年,我建议使用空合并运算符。如果数组键不存在,这也将抑制错误。

if (trim($_POST['question'] ?? '') === '') {
    // Handle error here
}
Run Code Online (Sandbox Code Playgroud)