167 votos

Mejor forma de comprobar variable null o cadena vacía?

Dado que PHP es un lenguaje dinámico ¿cuál es la mejor manera de comprobar si un campo está vacío?

Quiero para asegurarse de que:

  1. null es considerado una cadena vacía
  2. un sólo espacio en blanco de la cadena se considera vacía
  3. que "0", no se considera vacía

Esto es lo que tengo hasta ahora:

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

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

Debe haber una manera más sencilla de hacer esto?

267voto

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

105voto

jrowe Puntos 471

Antiguo post, pero alguien que la necesite como yo lo hice ;)

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

reemplace $str con la variable. NULL y "" tanto return 0 cuando se utiliza strlen.

19voto

Adal Puntos 121

Voy a aceptar humildemente si estoy equivocado, pero he probado en mi propio fin, y se encontró que las siguientes obras para el análisis de ambos string(0) "" y NULOS valores de las variables:

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

Que también podría ser revertido a prueba de éxito como tal:

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

7voto

Ben Blank Puntos 21786

Cuidado con los falsos negativos de la trim() - función que realiza un fundido a cadena antes de podar, y por lo tanto va a regresar por ejemplo, "Matriz" si se le pasa un array vacío. Que no puede ser un problema, dependiendo de la forma de procesar los datos, pero con el código de suministro, un campo denominado question[] podría ser suministrado en los datos de envío y parecen ser una cadena no vacía. En su lugar, me permito sugerir:

$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

3voto

e-satis Puntos 146299

No hay mejor forma, pero ya que es una operación que suele hacer muy a menudo, es mejor automatizar el proceso.

La mayoría de los marcos ofrecen una manera para hacer que argumentos de análisis de una tarea fácil. Puede construye su propio objeto. Rápido y sucio ejemplo :

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);

Symfony utiliza ese tipo de azúcar de forma masiva.

Pero usted está hablando de algo más que eso, con su "// Identificador de error aquí ". Se mezcla 2 puestos de trabajo : obtención de los datos y su procesamiento. Este no es el mismo en todos.

Existen otros mecanismos que puede utilizar para validar los datos. De nuevo, en los marcos de mostrar las mejores prácticas.

Crear objetos que representan los datos de su formulario, a continuación, adjuntar processses y caer de nuevo. Suena mucho más trabajo que la piratería de una rápida secuencia de comandos PHP (y es la primera vez), pero es reutilizable, flexible, y mucho menos propensa a errores, ya que la validación de formularios con la costumbre de PHP tiende a convertirse rápidamente en spaguetti código.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X