2009-04-05 31 views
156

Ich habe eine Funktion isNotEmpty, die wahr zurückgibt, wenn die Zeichenfolge nicht leer und falsch ist, wenn die Zeichenfolge leer ist. Ich habe herausgefunden, dass es nicht funktioniert, wenn ich einen leeren String durchlasse.Überprüfen, ob die Zeichenfolge leer ist

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

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

    return false; 
} 

Die Validierung der Zeichenfolge isNotEmpty mit gemacht wird:

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

die Zeichenfolge die sonst nicht ausgeführt leer Wenn ich verstehe nicht, warum, kann etwas Licht bitte jemand auf vergießen das bitte.

+39

Nur ein Vorschlag: es ist in der Regel eine schlechte Praxis mit negierten Namen Funktionen zu nutzen. Es ist lesbarer, die Funktion isEmpty ($ input) zu haben, sonst könnte man es so nennen: if (! IsNotEmpty ($ x)) ... Andererseits ist isNotEmpty() und (! IsEmpty()) nicht das ist anders. YMMV. – johndodo

+0

Um die gleiche Funktion ohne einen negierten Namen zu haben, vielleicht etwas wie hasContent(). – OsakaWebbie

+0

*!thatDifferent * @johndodo – coderatchet

Antwort

217

Einfache Problem darstellt. Wechsel:

if(strTemp != '') 

zu

if($strTemp != '') 

Diskutierbar können Sie auch ändern möchten es an:

if($strTemp !== '') 

seit != '' wird wahr zurück, wenn Sie passieren numerisch 0 und ein paar andere Fälle aufgrund PHP's automatic type conversion.

Denken Sie auch daran, PHP hat eine empty() Funktion bereits.

+2

Ändern Sie das If möglicherweise in: return $ strTemp! == ''; – strager

+0

Ja, das ist es, ich weiß nicht, wie ich das $ -Zeichen verpasst habe. Auch getestet passing value 0 und es funktioniert. Vielen Dank für Ihre Antwort. – bgosalci

+9

möchten Sie nicht leer() verwenden. Betrachten Sie eine Folge von Leerzeichen: $ x = ""; var_dump (! leer ($ x));/* (TRUE) */var_dump (isNotEmpty ($ x));/* (FALSE) */ – nickf

0

vielleicht können Sie versuchen, diese

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

die

11

in php.ini wegen der PHP-Konfiguration ist verwende ich immer einen regulären Ausdruck für eine leere Zeichenfolge für die Überprüfung, zurückgehend auf CGI/Perl Tage und auch mit Javascript, also warum nicht auch mit PHP, z (Wenn auch nicht getestet)

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

Wo \ S eine beliebige Nicht-Leerzeichen tatsächlich

+0

Dies ist die einzige Lösung hier, die nicht davon ausgeht, dass Null eine leere Zeichenfolge ist! –

+0

Große Lösung! –

12

In Ihrer if-Klausel in der Funktion beziehen Sie sich auf eine Variable 'strTemp', die nicht existiert. '$ strTemp' existiert jedoch.

Aber PHP hat schon eine leere() - Funktion zur Verfügung, warum also eigene?

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

Von php.net:

Rückgabewerte

gibt false zurück, wenn var einen nicht leeren und Nicht-Null-Wert hat.

Die folgenden Dinge in Betracht gezogen werden leer sein:

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

Nicht alle Implementierungen möchten, dass "0" als leer ausgewertet wird. Und wenn er das wollte, konnte er nicht genauso gut den if ($ x) Vergleich verwenden, d. H. If (! Trim ($ str))? – Calvin

+1

Beachten Sie, dass das Ausführen von $ tmpStr! = '' Auch true von $ tmpStr zurückgibt, das 0 oder false oder einen anderen leeren/false-Wert enthält. –

+5

Ihre Version wird nicht funktionieren: leer funktioniert auf Variablen, nicht auf Ausdrücke. – Hound

11

PHP wertet eine leere Zeichenfolge falsch ist, so dass Sie einfach verwenden können:

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

Das funktioniert gut bis du 0 passierst. Ansonsten ist die Idee super, ich werde es uns an einigen anderen Orten geben. Vielen Dank für Ihre Antwort. – bgosalci

3

Well , anstatt einer Antwort (ich glaube, du hast dein Problem bereits behoben), biete ich dir ein Stück adv an Eis.

Ich weiß nicht, über all die anderen, aber ich persönlich sehr verärgert über den Anblick von so etwas wie:

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

    return false; 

dies fordert eine elegante „return (<<condition>>);“ Lösung. Bitte sehen Sie sich immer Ihren Code an und entfernen Sie diese Art von Logik. Sie benötigen keine IF-Anweisung für alle Situation.

+1

Es ist nützlich, wenn Sie etwas anderes tun wollen, als nur in einem Zweig zurückzukehren (zum Beispiel das Ergebnis protokollieren). Wenn ich zurückgehe und es später mache, muss ich den Code ein wenig umstrukturieren, so dass ich genau wie der Asker eine Gewohnheit mache. –

27

PHP haben eine eingebaute Funktion namens empty() den Test, indem Sie if(empty($string)){...} Referenz php.net getan wird: php empty

+3

die leere Referenz ist bereits am Ende der angenommenen Antwort von Cletus. Sehen Sie auch, dass dieser Frage- und Antwortfaden vom April 2009 ist. Wie auch immer, danke für Ihre Eingabe. Ich gebe dir eine +1 für eine erste Antwort. – regilero

+35

Nicht leer() verwenden! empty() gibt true für Werte wie "0" zurück. Siehe http://php.net/manual/en/types.comparisons.php –

+1

@ScottDavidTesler Wenn die Zeichenkette "0" ist, wird sie wahr zurückgegeben? Oder nur wenn es die ganze Zahl 0 ist? –

0

Wenn Sie ein Feld nämlich serial_number und wollen leer überprüfen, dann

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

auf diese Weise können Sie alle Dateien in der Schleife mit einer anderen leeren Funktion

8

Just Just Verwendung Funktion strlen()

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

hängt davon ab, wie PHP die Funktion strlen() implementiert. In Delphi hat die Zeichenfolge beispielsweise ihre Länge minus 4 Byte Offset gespeichert, so dass ihre Länge zu prüfen ist trivial. –

+1

Kein Typ speichern. Vor 'PHP 5.3' gibt die Funktion '5' zurück, wenn '$ s' vom Typ 'Array' ist. 'Php> 5.3 'wird eine Ausnahme bilden. Ich empfehle 'is_string ($ s) && str_len ($ s)> 0' zu verwenden. '> 0' nur zum Lesen. –

0

Sie bekam eine Antwort, aber in Ihrem Fall können Sie mit

return empty($input); 

oder

return is_string($input); 
+1

das scheitert für 'leer (" 0 ")' – activatedgeek

+3

danke für -1 Kumpel. – geekido

+0

@geekido danke mir für -1 zu – Umair

-1

dies die kurze und effektive Lösung ist genau das, was Sie‘ Er sucht:

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

Nun, hier ist die kurze Methode, um zu überprüfen, ob die Zeichenfolge leer ist oder nicht.

$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

ich nur meine eigene Funktion schreiben, is_string für die Typprüfung und strlen die Länge zu überprüfen.

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

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

Here's a small test repl.it