210 votes

Meilleur moyen de vérifier si une variable est nulle ou vide ?

Puisque PHP est un langage dynamique, quelle est la meilleure façon de vérifier si un champ fourni est vide ?

Je veux m'en assurer :

  1. null est considéré comme une chaîne vide
  2. une chaîne de caractères comportant uniquement des espaces blancs est considérée comme vide
  3. que "0" n'est pas considéré comme vide

Voici ce que j'ai obtenu jusqu'à présent :

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

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

Il doit y avoir un moyen plus simple de faire cela ?

1 votes

Je dirais d'utiliser empty($question), mais cela considère également que 0 est vide.

5 votes

Yoda les conditions sont horribles

338voto

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

8 votes

Même si cela résout le problème, je ne suis pas sûr que ce soit plus simple. +1 quand même

4 votes

Puisque le PO demande une version "plus simple" d'une opération extrêmement simple, je vais dire que "mieux" est ce qui est réellement justifié.

2 votes

Je l'ai transformé en fonction. Cela devrait simplifier votre code de validation.

125voto

jrowe Points 471

Vieux poste mais quelqu'un pourrait en avoir besoin comme moi ;)

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

remplacer $str avec votre variable. NULL y "" retournent tous deux 0 lorsqu'ils utilisent strlen .

4 votes

Et il y a toujours : if(strcmp('', $var) == 0)...

13 votes

Pourquoi ==0 et pas simplement if (strlen($str)) ?

17 votes

@Noumenon Parce que cela nuirait à la lisibilité sans rien résoudre. Il est très facile de lire votre suggestion comme "s'il y a une longueur" alors qu'elle signifie (bien sûr) le contraire.

31voto

kta Points 4702

Utilisez la fonction empty() de PHP. Les éléments suivants sont considérés comme vides

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

Pour plus de détails, consultez fonction vide

13 votes

Le poster dit qu'ils ne veulent pas considérer "0" comme vide.

21voto

Adal Points 121

J'accepterai humblement si je me trompe, mais j'ai testé de mon côté et j'ai trouvé que ce qui suit fonctionne pour tester à la fois la chaîne (0) "" et les variables à valeur NULL :

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

Ce qui pourrait aussi être inversé pour tester le succès en tant que tel :

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

0 votes

Puis-je suggérer "if (trim($n)) " sinon, si une variable $_POST (par exemple) est simplement " ", elle sera considérée comme valide, alors que, dans la plupart des cas, c'est aussi bien qu'une chaîne vide.

0 votes

Si " " n'est pas une valeur acceptable pour une fonction spécifique, l'utilisation de trim est une bonne idée.

8 votes

Ceci renverra false pour "0", numérique 0 ou 0.0, et FALSE.

7voto

Ben Blank Points 21786

Attention aux faux négatifs de la trim() elle effectue un cast-to-string avant de couper, et retournera donc par exemple "Array" si vous lui passez un tableau vide. Cela peut ne pas être un problème, selon la façon dont vous traitez vos données, mais avec le code que vous fournissez, un champ nommé question[] pourrait être fourni dans les données POST et apparaître comme une chaîne non vide. À la place, je suggérerais

$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

0 votes

Je dirais que si vous obtenez un tableau alors que vous attendiez une chaîne de caractères, il devrait y avoir une erreur. Si vous attendez un tableau, vous devriez avoir une fonction de filtrage séparée pour cela.

0 votes

Ce code ne le traite-t-il pas comme une erreur ? Si le filtrage est effectué ailleurs, il faut veiller à ne pas dupliquer la connaissance des règles de validation des args à des endroits différents.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X