PHP检查字符串是否为空的最佳方法

时间:2010-12-25 19:00:44

标签: php

我看过很多php代码执行以下操作来检查字符串是否有效:

$ str是一个字符串变量。

if (!isset($str) || $str !== '') {
  // do something
}

我更喜欢做

if (strlen($str) > 0) {
  // something
}

第二种方法有什么问题吗?我应该注意哪些铸造问题?

9 个答案:

答案 0 :(得分:27)

if(empty($stringvar))
{
    // do something
}

如果要考虑空格,您还可以添加trim()来消除空格。

修改

请注意,对于像“0”这样的字符串,这将返回true,而strlen()则不会。

答案 1 :(得分:13)

如果isset()可能未定义,则需要$str

if (isset($str) && $str !== '') {
    // variable set, not empty string
}

使用!empty()会有一个重要的警告:字符串'0' evaluates to false


此外,有时候有人想检查$str是不是虚假的东西,如falsenull [1]。以前的代码没有处理这个问题。这是松散比较可能有用的罕见情况之一:

if (isset($str) && $str != '') {
    // variable set, not empty string, not falsy
}

上述方法很有意思,因为它仍然简明扼要,不会过滤掉'0'。但如果您使用它,请务必记录您的代码。

否则,您可以使用此等效但更详细的版本:

if (isset($str) && (string) $str !== '') {
    // variable set, not empty string, not falsy
}


当然,如果您确定$str已定义,则可以省略上述代码中的isset($str)


最后,考虑到'' == false'0' == false,但'' != '0',您可能已经猜到了:PHP comparisons aren't transitive(包括有趣的图表)。


[1]请注意,isset()已过滤掉null

答案 2 :(得分:6)

这将安全地检查只包含空格的字符串:

// Determines if the supplied string is an empty string.                                                                                 
// Empty is defined as null or containing only whitespace.                                                                               
// '0' is NOT an empty string!                                                                                                           
function isEmptyString($str) {
  return !(isset($str) && (strlen(trim($str)) > 0));
}

答案 3 :(得分:3)

这个怎么样:

if( !isset($str[0]) )
   echo "str is NULL or an empty string";

我在Antone Roundy

的评论中在PHP手册中找到了它

我在这里发布,因为我做了一些测试,似乎运作良好,但我想知道是否有一些副作用我不考虑。在此评论中的任何建议都将不胜感激。


修改

如Gras Double所述,当$str'0'时,上述代码将返回true。所以这个解决方案也不能很好地工作。

答案 4 :(得分:2)

根据PHP empty()doc(http://ca1.php.net/empty):

  

在PHP 5.5之前,empty()仅支持变量;其他任何东西都会导致解析错误。换句话说,以下将不起作用:empty(trim($ name))。

使用trim($ name)== false

答案 5 :(得分:1)

如果未定义变量$str,则strlen()方法将引发异常。这是首先使用isset()的全部目的。

答案 6 :(得分:1)

这个简单的老问题仍然很棘手。

strlen($var)只有在你完全确定$ var是一个字符串时才能正常工作。

isset($var)empty($var)结果基于变量的类型,在某些情况下可能会很棘手(例如空字符串“”)。查看此page中的表格了解详情。

<强>更新

这个问题实际上有2个案例:

案例1:您确定您的变量始终将成为“字符串”:

在这种情况下,只需测试长度:

if(strlen($str) > 0) {
    // do something..
}

案例2:您的变量可能<也不是是“字符串”:

在这种情况下,这取决于你想做什么。对我来说(大部分时间),如果它不是字符串,那么我将其验证为“false”。你可以这样做:

if(is_string($var) && $var !== '') {// true only if it's a string AND is not empty
    // do something ...
}

并且使它变短并处于1状态而不是2(如果你在相同条件下测试超过1个字符串时特别有用),我将其变为功能:

function isNonEmptyString($var) {
    return is_string($var) && $var !== '';
}


// Somewhere else..
// Reducing conditions to half
if(isNonEmptyString($var1) && isNonEmptyString($var2) && isNonEmptyString($var3)) {
    // do something
}

答案 7 :(得分:0)

如果字符串带有空格,修剪字符串也会有所帮助。

if (isset($str) &&  trim($str) !== '') {
    // code
}

答案 8 :(得分:-3)

我认为不是,因为strlen(string lenght)返回$ str变量的长度(整数)。 因此,如果变量为空,我将返回0.是0大于0.不要这么认为。 但我认为第一种方法可能会更安全一些。因为它检查变量是否为init,以及它是否为空。