ทำไมฟังก์ชั่นตรวจสอบว่าสตริงว่างเปล่าส่งคืนจริงหรือไม่? [ปิด]


231

ฉันมีฟังก์ชั่น isNotEmpty ซึ่งผลตอบแทนจริงถ้าสตริงไม่ว่างและเท็จถ้าสตริงว่าง ฉันพบว่ามันไม่ทำงานถ้าฉันส่งสตริงว่างผ่านมัน

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

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

    return false;
}

การตรวจสอบความถูกต้องของสตริงโดยใช้ isNotEmpty เสร็จแล้ว:

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

หากสตริงว่างเปล่าอย่างอื่นก็ไม่ทำงานฉันไม่เข้าใจว่าทำไมคนอื่นได้โปรดเปล่งแสงให้หน่อยได้ไหม


55
เพียงข้อเสนอแนะ: โดยทั่วไปแล้วมันเป็นการปฏิบัติที่ไม่ดีที่จะใช้ฟังก์ชั่นที่มีชื่อเมื่อตะกี้ มันอ่านได้ง่ายกว่าที่จะมีฟังก์ชั่น isEmpty ($ input) มิฉะนั้นคุณอาจเรียกมันว่าสิ่งนี้: if (! isNotEmpty ($ x)) ... ในทางกลับกัน isNotEmpty () และ (! isEmpty ()) ไม่ใช่ ที่แตกต่างกัน YMMV
johndodo

1
การมีฟังก์ชั่นเดียวกันโดยไม่มีชื่อที่ถูกทำให้ไร้สาระอาจเป็นสิ่งที่ต้องการ hasContent ()
OsakaWebbie

! thatDifferent @johndodo
coderatchet

นี่เป็นคำถามนอกระบบ:คำถามที่พิมพ์ผิด
mickmackusa

คำตอบ:


320

ปัญหาง่าย ๆ จริง ๆ เปลี่ยนแปลง:

if (strTemp != '')

ถึง

if ($strTemp != '')

คุณอาจต้องการเปลี่ยนเป็น:

if ($strTemp !== '')

ตั้งแต่!= ''จะกลับจริงถ้าคุณผ่านเป็นตัวเลข 0 และกรณีอื่น ๆ ไม่กี่เนื่องจากการแปลงชนิดของ PHP อัตโนมัติ

คุณไม่ควรใช้ฟังก์ชั่นempty ()สำหรับสิ่งนี้ ดูความคิดเห็นและตารางการเปรียบเทียบ PHP ชนิด


4
เนื้อหาเปลี่ยน if เป็น: return $ strTemp! == '';
แปลกหน้า

12
คุณไม่ต้องการใช้ที่ว่างเปล่า () พิจารณาสตริงของช่องว่าง: $ x = ""; var_dump (ที่ว่างเปล่า ($ x)!); / * (TRUE) / var_dump (isNotEmpty ($ x)); / (FALSE) * /
nickf

5
OP คือการตัดแต่งสตริง ในกรณีนี้มันเหมาะสม
cletus

8
@cletus: จากนั้นพิจารณาสตริง $ s = '0' หากคุณโทรว่าง ($ s) ระบบจะประเมินว่าเป็นจริง (ไม่ใช่ imho ที่ใช้งานง่าย แต่เป็นเช่นนั้น)
johndodo

28
อย่าใช้ที่ว่างเปล่า ()! empty () จะคืนค่าจริงสำหรับค่าเช่น '0' ดู php.net/manual/en/types.comparisons.php
Scott Tesler

27

PHP มีฟังก์ชั่นในตัวที่เรียกว่าempty() การทดสอบทำโดยการพิมพ์ if(empty($string)){...} Reference php.net: php


4
การอ้างอิงที่ว่างเปล่าอยู่ที่ท้ายคำตอบที่ยอมรับจาก cletus แล้ว ดูเช่นกันว่าคำถามและคำตอบนี้มาจากเมษายน 2009 อย่างไรก็ตามขอบคุณสำหรับข้อมูลของคุณ ฉันจะให้ +1 สำหรับคำตอบแรก
regilero

64
อย่าใช้ที่ว่างเปล่า ()! empty () จะคืนค่าจริงสำหรับค่าเช่น '0' ดูphp.net/manual/en/types.comparisons.php
Scott Tesler

3
@ScottDavidTesler หากสตริงเป็น "0" จะส่งคืนจริงหรือไม่ หรือเฉพาะถ้าเป็นจำนวนเต็ม 0
Tomas Zubiri

5
@TomasZubiri ใช่สตริงที่มี "0" จะกลับมาจริง
Michael Sund

3
โปรดไม่มีใครโหวตคำตอบที่ไม่ถูกต้อง - อ่านความคิดเห็นด้านบน!
ToolmakerSteve

24

ฉันมักจะใช้การแสดงออกปกติสำหรับการตรวจสอบสตริงว่างย้อนหลังไปถึงวัน CGI / Perl และด้วยจาวาสคริปต์ดังนั้นทำไมไม่ใช้ PHP เช่นกันเช่น (แม้จะยังไม่ได้ทดสอบ)

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

โดยที่ \ S แสดงถึงอักขระที่ไม่ใช่ช่องว่าง


1
นี่เป็นทางออกเดียวที่นี่ที่ไม่ถือว่าศูนย์เป็นเช่นเดียวกับสตริงว่าง!
Matthew Lock

1
ทางออกที่ดี ตามหมายเหตุด้านstackoverflow.com/a/4544642/5411817กล่าวถึง: โดยค่าเริ่มต้น.ไม่ตรงกับบรรทัดใหม่ - [\s\S]เป็นการแฮ็กรอบปัญหานั้น นี่เป็นเรื่องปกติใน JavaScript แต่ใน PHP คุณสามารถใช้/sแฟล็กเพื่อทำให้จุดตรงกับอักขระทั้งหมด และstackoverflow.com/a/4544646/5411817กล่าวถึง: (?s)เปิดsโหมดและ(?-s)ปิดหากปิด เมื่อปิดการใช้งานใด ๆ ต่อไปนี้.จะไม่ตรงกับบรรทัดใหม่ หากคุณต้องการเปิด / ปิดสวิตช์แบบอินไลน์ (ฝังอยู่ภายใน regex) แทนที่จะเป็นธง regex
SherylHohman

19

ในifประโยคของคุณในฟังก์ชั่นคุณหมายถึงตัวแปรstrTempที่ไม่มีอยู่ $strTempมีอยู่แม้ว่า

แต่ PHP แล้วมีempty()ฟังก์ชั่นที่สามารถใช้ได้; ทำด้วยตัวเองทำไม

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

จาก php.net:

คืนค่า

ส่งคืน FALSE ถ้า var มีค่าที่ไม่ว่างเปล่าและไม่เป็นศูนย์

สิ่งต่อไปนี้จะถือว่าว่างเปล่า:

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


11
การปรับใช้บางอย่างอาจไม่ต้องการให้ "0" ถูกประเมินว่าว่างเปล่า และถ้าเขาต้องการสิ่งนั้นเขาก็ไม่สามารถใช้การเปรียบเทียบ if ($ x) เช่น If (! trim ($ str)) ได้หรือไม่
Calvin

1
โปรดทราบว่าการทำ $ tmpStr! = '' จะส่งกลับค่าจริงของ $ tmpStr ที่เก็บ 0 หรือเท็จหรือค่าว่าง / เท็จอื่น
Pim Jager

5
เวอร์ชันของคุณใช้งานไม่ได้จริง: ใช้งานได้กับตัวแปรว่างเปล่าไม่ใช่นิพจน์
หมา

13

PHP ประเมินสตริงว่างเปล่าเป็นเท็จดังนั้นคุณสามารถใช้:

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

9
ใช้งานได้ดีจนกว่าคุณจะเป็น 0 มิฉะนั้นความคิดที่ยอดเยี่ยมฉันจะใช้มันในที่อื่น ขอบคุณสำหรับคำตอบของคุณ
bgosalci

10

เพียงใช้ฟังก์ชั่น strlen ()

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

1
มันขึ้นอยู่กับว่า PHP ใช้ฟังก์ชัน strlen () อย่างไร ตัวอย่างเช่นใน Delphi สตริงจริง ๆ แล้วเก็บความยาวลบด้วยออฟเซ็ต 4 ไบต์ดังนั้นการตรวจสอบความยาวจึงเป็นเรื่องเล็กน้อย
doctorlai

5
ไม่พิมพ์บันทึก ก่อนที่Php 5.3ฟังก์ชั่นจะกลับมา5ถ้าเป็นประเภท$s จะเพิ่มขึ้นข้อยกเว้น ผมขอแนะนำให้ใช้ เพียงเพื่อการอ่าน arrayPhp > 5.3is_string($s) && str_len($s) > 0>0
magic_al

5

ฉันเพิ่งเขียนฟังก์ชั่นของตัวเองis_stringสำหรับการตรวจสอบชนิดและstrlenเพื่อตรวจสอบความยาว

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

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

นี่คือแบบทดสอบย่อย ๆ

แก้ไข: คุณยังสามารถใช้ฟังก์ชันตัดแต่งเพื่อทดสอบว่าสตริงว่างหรือไม่

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

1

ฉันต้องการทดสอบฟิลด์ว่างใน PHP และใช้

ctype_space($tempVariable)

ซึ่งทำงานได้ดีสำหรับฉัน


นี่เป็นคำตอบที่ถูกต้องสำหรับคำถามอื่น คำตอบนี้ไม่ได้ตรวจสอบว่าสตริงว่างเปล่า
mickmackusa

0

นี่คือวิธีสั้น ๆ เพื่อตรวจสอบว่าสตริงว่างเปล่าหรือไม่

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

ตรวจสอบstrlen()คำแนะนำในปี 2014 ในหน้านี้ คำตอบของคุณไม่เพิ่มคุณค่าใหม่
mickmackusa

0

คุณสามารถส่งไปบูลส์อย่าลืมจัดการศูนย์

function isEmpty(string $string): bool {
    if($string === '0') {
        return false;
    }
    return !(bool)$string;
}

var_dump(isEmpty('')); // bool(true)
var_dump(isEmpty('foo')); // bool(false)
var_dump(isEmpty('0')); // bool(false)

(bool)$strเป็นเช่นเดียวกับการทำและมีปัญหาเดียวกันกับ!empty($str) '0'อ่านPHP Booleansส่วน "การแปลงเป็นบูลีน" นอกจากนี้คุณได้รับมันไปข้างหลัง - !(bool)$string'ควรจะเป็น หรือฟังก์ชั่นของคุณควรมีชื่อว่า "isNotEmpty" ไม่ว่าคุณจะติดอยู่กับการจัดการที่ไม่ถูกต้องของ '0'
ToolmakerSteve

@ToolmakerSteve สำหรับ0ปัญหาที่เกิดขึ้นเพียงจัดการก่อนที่จะส่งกลับสตริง casted และขอบคุณมากฉันลืมการปฏิเสธ!(ชื่อฟังก์ชั่นเมื่อตะกี้คือการปฏิบัติที่ไม่ดี) แก้ไขโพสต์ของฉัน
Fabian Picone

-1

ฉันรู้ว่ากระทู้นี้ค่อนข้างเก่า แต่ฉันต้องการแบ่งปันหนึ่งในหน้าที่ของฉัน ฟังก์ชันด้านล่างนี้สามารถตรวจสอบสตริงว่างสตริงที่มีความยาวสูงสุดความยาวต่ำสุดหรือความยาวที่แน่นอน หากคุณต้องการตรวจสอบสตริงว่างเปล่าเพียงแค่ใส่ $ min_len และ $ 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;
}

-2

บางทีคุณสามารถลองสิ่งนี้

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

นั่นเป็นเพราะการกำหนดค่า php ใน php.ini


-2

หากคุณมีช่องคือ serial_number และต้องการตรวจสอบว่างแล้ว

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

ด้วยวิธีนี้คุณสามารถตรวจดูไฟล์ทั้งหมดในลูปด้วยฟังก์ชันว่างอื่น


empty()ถูกแนะนำแล้วในหน้านี้ย้อนกลับไปในปี 2009
mickmackusa

-2

นี่เป็นวิธีแก้ปัญหาสั้น ๆ และมีประสิทธิภาพตรงกับที่คุณต้องการ:

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

ฉันไม่ได้ทดสอบว่ามันใช้งานได้หรือไม่ แต่ถ้าเป็นเช่นนั้นมันจะเป็นการแปลงnullเป็นสตริงว่างเพื่อทำการเปรียบเทียบ $input > ''ซึ่งในกรณีนี้ก็จะมีความชัดเจนมากขึ้นที่จะพูดในสิ่งที่คุณหมายถึง: นั่นคือ "ทำการเปรียบเทียบคำศัพท์ระหว่างสตริงอินพุตและสตริงว่าง" trim($input) > ''หรือที่จะไม่สนใจช่องว่างที่ปลาย:
ToolmakerSteve

... นอกจากนี้จะต้องมีการทดสอบสิ่งที่เกิดขึ้นเมื่อเป็น$input '0'ไม่ชัดเจนว่า php ทำnumericหรือlexicalเปรียบเทียบเมื่ออาร์กิวเมนต์แรกเป็นสตริงตัวเลข
ToolmakerSteve

-3

คุณได้รับคำตอบ แต่ในกรณีของคุณคุณสามารถใช้

return empty($input);

หรือ

return is_string($input);

5
นี้ล้มเหลวempty("0")
activatedgeek

2
@geekido - คำตอบที่ผิด downvoting เป็นส่วนหนึ่งของ StackOverflow - มันย้ายคำตอบเหล่านั้นลงและกระตุ้นให้ผู้ตอบเพื่อแก้ไขคำตอบหรือลบออก คุณเข้าใจหรือไม่ว่าอะไรคือคำตอบของคุณ? 1. empty- คำตอบนี้ได้รับแล้วดังนั้นการพูดอีกครั้งไม่ได้ช่วยอะไรเลย ที่แย่กว่านั้นตามที่ได้กล่าวไว้ในความคิดเห็นมันผิด - ค่าใด ๆ ที่เทียบเท่ากับ0จะถูกพิจารณาว่า "ว่างเปล่า" 2. is_stringผิดในวิธีที่แตกต่าง - สตริงว่างเปล่า''เป็นสตริงดังนั้นจะส่งกลับจริงในกรณีนั้น - ไม่สามารถทำสิ่งที่ถามคำถาม
ToolmakerSteve
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.