为什么一个函数检查字符串是否为空总是返回true?

我有一个函数isNotEmpty,如果字符串不是空的,返回true,如果字符串是空的,返回false。我发现,如果我传递一个空字符串,它是不工作的。

function isNotEmpty($input)
{
$strTemp = $input;
$strTemp = trim($strTemp);


if(strTemp != '') //Also tried this "if(strlen($strTemp) > 0)"
{
return true;
}


return false;
}

使用isNotEmpty对字符串进行验证:

if(isNotEmpty($userinput['phoneNumber']))
{
//validate the phone number
}
else
{
echo "Phone number not entered<br/>";
}

如果字符串是空的,否则不执行,我不明白为什么,有人能解释一下吗?

465891 次浏览

我总是使用正则表达式来检查空字符串,可以追溯到CGI/Perl的日子,也与Javascript,所以为什么不与PHP以及,例如(尽管未经测试)

return preg_match('/\S/', $input);

其中\S表示任何非空白字符

其实很简单。变化:

if (strTemp != '')

if ($strTemp != '')

你可能还想把它改成:

if ($strTemp !== '')

因为!= ''将返回true,如果你传递的是数字0和其他一些情况下,由于PHP的自动类型转换

不应该使用内置的空()函数;参见注释和PHP类型比较表

在函数中的if子句中,你引用的是一个不存在的变量strTemp$strTemp确实存在。

但是PHP已经有一个empty()函数可用;为什么要自己做呢?

if (empty($str))
/* String is empty */
else
/* Not empty */

从php.net:

返回值

如果var有一个非空值则返回FALSE 和非零值。

以下的事情被认为是 是空的:< / p >

* "" (an empty string)
* 0 (0 as an integer)
* "0" (0 as a string)
* NULL
* FALSE
* array() (an empty array)
* var $var; (a variable declared, but without a value in a class)

http://www.php.net/empty

PHP将空字符串计算为false,所以你可以简单地使用:

if (trim($userinput['phoneNumber'])) {
// validate the phone number
} else {
echo "Phone number not entered<br/>";
}
PHP有一个内置函数empty() 测试是通过打字来完成的 if(empty($string)){...} php: php空

如果你有一个字段,即serial_number,并希望检查为空,那么

$serial_number = trim($_POST[serial_number]);
$q="select * from product where user_id='$_SESSION[id]'";
$rs=mysql_query($q);
while($row=mysql_fetch_assoc($rs)){
if(empty($_POST['irons'])){
$irons=$row['product1'];
}

通过这种方式,您可以使用另一个空函数检查循环中的所有字段

只需使用strlen()函数

if (strlen($s)) {
// not empty
}

你有答案,但在你的情况下,你可以用

return empty($input);

return is_string($input);

这是一个简短而有效的解决方案,正是你正在寻找的:

return $input > null ? 'not empty' : 'empty' ;

这里有一个简短的方法来检查字符串是否为空。

$input; //Assuming to be the string




if(strlen($input)==0){
return false;//if the string is empty
}
else{
return true; //if the string is not empty
}

我只编写了自己的函数,is_string用于类型检查,strlen用于检查长度。

function emptyStr($str) {
return is_string($str) && strlen($str) === 0;
}


print emptyStr('') ? "empty" : "not empty";
// empty

< a href = " https://repl。it/JzKC" rel="noreferrer">这是一个小测试repit

编辑:你也可以使用修剪函数来测试字符串是否为空。

is_string($str) && strlen(trim($str)) === 0;

你可以简单地转换为bool,不要忘记处理零。

function isEmpty(string $string): bool {
if($string === '0') {
return false;
}
return !(bool)$string;
}


var_dump(isEmpty('')); // bool(true)
var_dump(isEmpty('foo')); // bool(false)
var_dump(isEmpty('0')); // bool(false)

我知道这个线程已经很老了,但我只是想分享我的一个函数。下面的函数可以检查空字符串、最大长度、最小长度或精确长度。如果你想检查空字符串,只要把$min_len和$max_len设为0。

function chk_str( $input, $min_len = null, $max_len = null ){


if ( !is_int($min_len) && $min_len !== null ) throw new Exception('chk_str(): $min_len must be an integer or a null value.');
if ( !is_int($max_len) && $max_len !== null ) throw new Exception('chk_str(): $max_len must be an integer or a null value.');


if ( $min_len !== null && $max_len !== null ){
if ( $min_len > $max_len ) throw new Exception('chk_str(): $min_len can\'t be larger than $max_len.');
}


if ( !is_string( $input ) ) {
return false;
} else {
$output = true;
}


if ( $min_len !== null ){
if ( strlen($input) < $min_len ) $output = false;
}


if ( $max_len !== null ){
if ( strlen($input) > $max_len ) $output = false;
}


return $output;
}

我需要在PHP中测试一个空字段并使用

ctype_space($tempVariable)

这对我来说很有效。