[php] null 또는 빈 문자열에 대한 변수를 확인하는 더 좋은 방법은 무엇입니까?

PHP는 동적 언어이므로 제공된 필드가 비어 있는지 확인하는 가장 좋은 방법은 무엇입니까?

나는 그것을 보장하고 싶다 :

  1. null은 빈 문자열로 간주됩니다
  2. 공백 만있는 문자열은 비어있는 것으로 간주됩니다.
  3. “0”은 비어있는 것으로 간주되지 않습니다

이것이 내가 지금까지 얻은 것입니다.

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

if ("" === "$question") {
    // Handle error here
}

이 작업을 수행하는 더 간단한 방법이 있어야합니까?



답변

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


답변

오래된 게시물이지만 누군가가 내가 한 것처럼 필요할 수도 있습니다.)

if (strlen($str) == 0){
do what ever
}

$str변수로 대체 하십시오.
NULL""사용할 때 둘 다 0을 반환 strlen합니다.


답변

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)

자세한 내용은 빈 기능 확인


답변

내가 틀렸다면 겸손히 받아 들일 것이지만, 나는 내 자신의 목적으로 테스트했으며 string (0) “”및 NULL 값 변수를 테스트하는 데 다음이 작동한다는 것을 알았습니다.

if ( $question ) {
  // Handle success here
}

성공 여부를 테스트하기 위해 되돌릴 수도 있습니다.

if ( !$question ) {
  // Handle error here
}


답변

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


답변

더 좋은 방법은 없지만 일반적으로 수행하는 작업이므로 프로세스를 자동화하는 것이 좋습니다.

대부분의 프레임 워크는 인수 구문 분석을 쉽게 수행 할 수있는 방법을 제공합니다. 당신은 그것을 위해 자신의 객체를 만들 수 있습니다. 빠르고 더러운 예 :

class Request
{

    // This is the spirit but you may want to make that cleaner :-)
    function get($key, $default=null, $from=null)
    {
         if ($from) :
             if (isset(${'_'.$from}[$key]));
                return sanitize(${'_'.strtoupper($from)}[$key]); // didn't test that but it should work
         else
             if isset($_REQUEST[$key])
                return sanitize($_REQUEST[$key]);

         return $default;
    }

    // basics. Enforce it with filters according to your needs
    function sanitize($data)
    {
          return addslashes(trim($data));
    }

    // your rules here
    function isEmptyString($data)
    {
        return (trim($data) === "" or $data === null);
    }


    function exists($key) {}

    function setFlash($name, $value) {}

    [...]

}

$request = new Request();
$question= $request->get('question', '', 'post');
print $request->isEmptyString($question);

심포니는 그런 종류의 설탕을 대량으로 사용합니다.

그러나 “// 여기에서 오류 처리”를 사용하여 그 이상에 대해 이야기하고 있습니다. 데이터를 가져 와서 처리하는 두 가지 작업을 혼합하고 있습니다. 이것은 전혀 동일하지 않습니다.

데이터를 확인하는 데 사용할 수있는 다른 메커니즘이 있습니다. 다시 말해, 프레임 워크는 최고의 실용성을 보여줄 수 있습니다.

양식의 데이터를 나타내는 객체를 만든 다음 프로세스를 첨부하고 다시 사용합니다. 빠른 PHP 스크립트를 해킹하는 것이 훨씬 많은 작업으로 들리지만 (처음은 아닙니다), 일반적인 PHP의 폼 유효성 검사가 스파게티 코드가되기 때문에 재사용 가능하고 유연하며 오류가 훨씬 적습니다.


답변

이것은 배열 문자열을 검사합니다 .

function is_set($val) {
  if(is_array($val)) return !empty($val);

  return strlen(trim($val)) ? true : false;
}