[php] 문자열이 비어 있는지 확인하는 함수가 항상 true를 반환하는 이유는 무엇입니까? [닫은]

문자열이 비어 있지 않으면 true를 반환하고 문자열이 비어 있으면 false를 반환하는 isNotEmpty 함수가 있습니다. 빈 문자열을 전달하면 작동하지 않는 것으로 나타났습니다.

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/>";
}

문자열이 비어 있으면 다른 것이 실행되지 않습니다. 왜 그런지 이해할 수 없습니다. 누군가 가이 내용을 밝힐 수 있습니까?



답변

실제로 간단한 문제. 변화:

if (strTemp != '')

if ($strTemp != '')

아마도 당신은 그것을 다음과 같이 바꾸고 싶을 수도 있습니다 :

if ($strTemp !== '')

이후 != ''당신이 통과하면 true를 돌려줍니다 0 숫자와 인해 약간 다른 경우입니다 PHP의 자동 형 변환 .

이를 위해 내장 empty () 함수를 사용 해서는 안됩니다 . 주석 및 PHP 유형 비교표를 참조하십시오 .


답변

PHP는
Reference php.net : php empty를empty()
입력하여 테스트
라는 내장 함수를 가지고 있습니다if(empty($string)){...}


답변

나는 항상 빈 문자열을 확인하고 CGI / Perl 일과 Javascript를 사용하여 정규 표현식을 사용하므로 PHP를 사용하지 않는 이유는 무엇입니까?

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

여기서 \ S는 공백이 아닌 문자를 나타냅니다.


답변

if함수 의 절에서 strTemp존재하지 않는 변수 를 참조하고 있습니다. $strTemp그래도 존재합니다.

그러나 PHP에는 이미 empty()사용 가능한 기능이 있습니다. 왜 자신을 만드나요?

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

php.net에서 :

반환 값

var에 비어 있지 않고 0이 아닌 값이 있으면 FALSE를 반환합니다.

다음은 비어있는 것으로 간주됩니다.

* "" (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/>";
}


답변

strlen () 함수를 사용하십시오.

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


답변

난 그냥 내 자신의 함수를 작성 is_string 유형 검사과 나 strlen 길이를 확인 할 수 있습니다.

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

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

다음은 작은 테스트 반복입니다.

편집 : 트림 기능을 사용 하여 문자열도 비어 있는지 테스트 할 수도 있습니다 .

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