web-dev-qa-db-fra.com

Vérifier si la chaîne est vide

J'ai une fonction isNotEmpty qui renvoie vrai si la chaîne n'est pas vide et faux si la chaîne est vide. J'ai découvert que cela ne fonctionne pas si je passe une chaîne vide à travers elle. 

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

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

    return false;
}

La validation de la chaîne en utilisant isNotEmpty est faite:

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

Si la chaîne est vide, le reste ne s'exécute pas, je ne comprends pas pourquoi, quelqu'un peut-il s'il vous plaît éclaircir ceci s'il vous plaît.

184
bgosalci

Problème simple en fait. Changement:

if (strTemp != '')

à 

if ($strTemp != '')

On peut aussi vouloir changer cela en:

if ($strTemp !== '')

puisque != '' retournera true si vous passez est numérique 0 et quelques autres cas en raison de conversion de type automatique de PHP .

Vous ne devriez pas utiliser la fonction intégrée empty () () pour cela; voir les commentaires et les tables de comparaison PHP } _.

264
cletus

PHP a une fonction intégrée appelée empty() Le test est fait en tapant if(empty($string)){...} Référence php.net: php empty

33
Malak

J'utilise toujours une expression régulière pour rechercher une chaîne vide, qui remonte aux jours CGI/Perl, et aussi avec Javascript, alors pourquoi pas avec PHP également, par exemple. (bien que non testé)

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

Où\S représente un caractère autre qu'un espace

16
George Jempty

Dans votre clause if de la fonction, vous faites référence à une variable 'strTemp' qui n'existe pas. '$ strTemp' existe cependant.

Mais PHP a déjà une fonction empty () - disponible, pourquoi créer la vôtre?

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

De php.net:

Valeurs de retour

Retourne FALSE si var a un Non vide. et valeur non nulle.

Les choses suivantes sont considérées comme être vide:

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

15
Björn

PHP évalue une chaîne vide à false, vous pouvez donc simplement utiliser:

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

Il suffit d'utiliser la fonction strlen ()

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

Eh bien, au lieu d’une réponse (je crois que vous avez déjà réglé votre problème), je vais vous donner un conseil.

Je ne connais pas tous les autres, mais je suis personnellement très ennuyé à la vue de quelque chose comme:

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

    return false;

cela appelle une solution élégante "return (<<condition>>);". Veuillez toujours regarder votre code et supprimer ce type de logique. Vous n'avez pas besoin d'une déclaration IF pour chaque situation.

3
Peter Perháč

Je viens d'écrire ma propre fonction, is_string pour la vérification du type et strlen pour vérifier la longueur.

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

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

Voici un petit test repl.it

EDIT: Vous pouvez également utiliser la fonction trim pour vérifier si la chaîne est également vide.

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

Eh bien voici la méthode courte pour vérifier si la chaîne est vide ou non.

$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
}
2
abhishek bagul

si vous avez un champ à savoir numéro de série et que vous voulez vérifier vide, alors

$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 cette façon, vous pouvez contrôler tous les champs de la boucle avec une autre fonction vide

0
user2042007

J'avais besoin de tester un champ vide dans PHP et utilisé

ctype_space($tempVariable)

qui a bien fonctionné pour moi.

0
TRayman

Vous pouvez simplement lancer pour bool

(bool)$string;

ou

function isEmpty(string $string): bool {
   return (bool)$string;
}
0
Fabian Picone

peut-être que tu peux essayer ça

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

c'est à cause de la configuration de php dans php.ini

0
0xFF

Vous avez une réponse mais dans votre cas, vous pouvez utiliser 

return empty($input);

ou 

return is_string($input);
0
geekido

Je sais que ce fil a été assez vieux mais je voulais juste partager une de mes fonctions. Cette fonction ci-dessous permet de vérifier les chaînes vides, chaîne avec des longueurs maximales, minimales ou exactes. Si vous voulez vérifier les chaînes vides, il suffit de mettre $ min_len et $ max_len à 0.

function chk_str( $input, $min_len = null, $max_len = null ){

    if ( !is_int($min_len) && $min_len !== null ) throw new Exception('chk_str(): $min_len must be an integer or a null value.');
    if ( !is_int($max_len) && $max_len !== null ) throw new Exception('chk_str(): $max_len must be an integer or a null value.'); 

    if ( $min_len !== null && $max_len !== null ){
         if ( $min_len > $max_len ) throw new Exception('chk_str(): $min_len can\'t be larger than $max_len.');
    }

    if ( !is_string( $input ) ) {
        return false;
    } else {
        $output = true;
    }

    if ( $min_len !== null ){
        if ( strlen($input) < $min_len ) $output = false;
    }

    if ( $max_len !== null ){
        if ( strlen($input) > $max_len ) $output = false;
    }

    return $output;
}
0
Kevin Ng