2009-04-05 23 views
156

Tengo una función isNotEmpty que devuelve verdadero si la cadena no está vacía y falsa si la cadena está vacía. Descubrí que no funciona si paso una cuerda vacía a través de él.Comprobando si la cadena está vacía

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

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

    return false; 
} 

La validación de la cadena mediante isNotEmpty se hace:

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

Si la cadena está vacía, el otro no se ejecuta, no entiendo por qué, por favor alguien puede arrojar algo de luz sobre esto por favor.

+39

Sólo una sugerencia: es generalmente una mala práctica utilizar funciones con nombres negados. Es más legible tener la función isEmpty ($ input); de lo contrario, podría llamarlo así: if (! IsNotEmpty ($ x)) ... Por otro lado, isNotEmpty() y (! IsEmpty()) no son eso diferente. YMMV. – johndodo

+0

Tener la misma función sin un nombre negado, tal vez algo como hasContent(). – OsakaWebbie

+0

*!thatDifferent * @johndodo – coderatchet

Respuesta

217

problema simple realidad. Cambio:

if(strTemp != '') 

a

if($strTemp != '') 

Podría decirse que también puede querer cambiarlo a:

if($strTemp !== '') 

desde != '' devolverá true si pasa es numérico 0 y algunos otros casos debido a PHP's automatic type conversion.

También tenga en cuenta que PHP ya tiene una función empty().

+2

Discutible, cambie el if en: return $ strTemp! == ''; – strager

+0

Sí, eso es todo, no sé cómo me perdí el signo $. También probó pasar el valor 0 y funciona. Gracias por su respuesta. – bgosalci

+9

no desea usar empty(). Considere una cadena de espacios: $ x = ""; var_dump (! empty ($ x));/* (TRUE) */var_dump (isNotEmpty ($ x));/* (FALSE) */ – nickf

0

tal vez usted puede probar este

if(isNotEmpty($userinput['phoneNumber']) == true) 

que es debido a la configuración de PHP en php.ini

11

siempre utilizo una expresión regular para comprobar si hay una cadena vacía, que data de CGI/Perl días , y también con Javascript, ¿por qué no con PHP también, por ejemplo (Aunque no probado)

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

Donde \ S representa cualquier carácter que no sea un espacio en blanco

+0

¡Esta es la única solución aquí que no asume que cero es lo mismo que una cadena vacía! –

+0

¡Gran solución! –

12

En su cláusula if en la función, se refiere a una variable 'strTemp' que no existe. '$ strTemp' existe, sin embargo.

Pero PHP ya tiene una función vacía() - disponible, ¿por qué hacer la suya?

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

De php.net:

devolver valores

devuelve falso si var tiene un no vacío y un valor distinto de cero.

Las siguientes expresiones son consideradas estar vacíos:

* "" (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

+4

No todas las implementaciones querrían que el "0" se evalúe como vacío. Y si quisiera eso, ¿no podría usar la comparación if ($ x), por ejemplo, If (! Trim ($ str))? – Calvin

+1

Tenga en cuenta que hacer $ tmpStr! = '' También devolverá true de $ tmpStr contiene 0 o falso u otro valor vacío/falso. –

+5

Su versión no funcionará en realidad: trabajos vacíos en variables, no en expresiones. – Hound

11

PHP evalúa una cadena vacía en false, por lo que simplemente puede utilizar:

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

Esto funciona bien hasta que pases 0. De lo contrario, la idea es genial, lo haremos en otros lugares. Gracias por su respuesta. – bgosalci

3

Bueno , en lugar de una respuesta (creo que ya arregló su problema), le ofreceré una pieza de adv hielo.

no sé sobre todos los demás, pero yo personalmente se ponen muy molesto a la vista de algo como:

if(<<condition>>) 
    { 
     return true; 
    } 

    return false; 

esto exige una solución elegante "return (<<condition>>);". Por favor, siempre eche un vistazo a su código y elimine este tipo de lógica. No necesita una instrucción IF para cada situación.

+1

es útil si desea hacer algo más que simplemente regresar en cualquiera de las ramas (por ejemplo, registrar el resultado). Regresar y hacerlo más tarde implica reestructurar un poco el código, así que solo hago lo mismo que el asker como un hábito. –

27

PHP han construido en función llamada empty() se hace la prueba escribiendo if(empty($string)){...} php.net Referencia: php empty

+3

la referencia vacía ya está al final de la respuesta aceptada de cletus. Vea también que este hilo de preguntas y respuestas es de abril de 2009. De todos modos, gracias por su contribución. Te doy un +1 por una primera respuesta. – regilero

+35

¡No use empty()! empty() devolverá true para valores como '0'. Consulte http://php.net/manual/en/types.comparisons.php –

+1

@ScottDavidTesler Si la cadena es "0", ¿será verdadera? O solo si es el entero 0? –

0

si tiene un campo de saber núm_de_serie y desea comprobar vacía, entonces

$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']; 
} 

de esta manera puede ver todos los archivos en el bucle con otra función vacía

8

Sólo uso strlen() la función

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

depende de cómo PHP implemente la función strlen(). Por ejemplo, en Delphi, la cadena en realidad ha almacenado su longitud menos el desplazamiento de 4 bytes, por lo que comprobar su longitud es trivial. –

+1

No escriba guardar. Antes de 'Php 5.3', la función devolverá' 5' si '$ s' es de tipo' array'. 'Php> 5.3' levantará una excepción. Recomiendo usar 'is_string ($ s) && str_len ($ s)> 0'. '> 0' solo para fines de lectura. –

0

Se obtuvo una respuesta, pero en su caso se puede usar

return empty($input); 

o

return is_string($input); 
+1

esto falla para 'empty (" 0 ")' – activatedgeek

+3

gracias por -1 amigo. – geekido

+0

@geekido gracias por -1 también – Umair

-1

esta es la solución a corto y eficaz, exactamente lo que' está buscando:

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

Bueno, aquí está el método corto para verificar si la cadena está vacía o no.

$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 
} 
0

acabo de escribir mi propia función, is_string para la comprobación de tipos y strlen para comprobar la longitud.

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

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

Here's a small test repl.it

Cuestiones relacionadas