क्यों एक फ़ंक्शन जाँचता है कि क्या एक स्ट्रिंग हमेशा खाली होती है सच है? [बन्द है]


231

मेरे पास एक फ़ंक्शन हैNotEmpty जो स्ट्रिंग को खाली और झूठा नहीं है अगर स्ट्रिंग खाली है तो सच है। मुझे पता चला है कि अगर मैं इसके माध्यम से एक खाली स्ट्रिंग पास करता हूं तो यह काम नहीं कर रहा है।

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

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

    return false;
}

.NotEmpty का उपयोग करने वाले स्ट्रिंग का सत्यापन किया जाता है:

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

यदि स्ट्रिंग खाली है, तो दूसरा निष्पादित नहीं करता है, मुझे समझ में नहीं आता कि क्यों, क्या कोई कृपया इस पर कुछ प्रकाश डाल सकता है।


55
बस एक सुझाव: यह आमतौर पर नकारात्मक नामों वाले कार्यों का उपयोग करने के लिए एक बुरा अभ्यास है। फ़ंक्शन isEmpty ($ इनपुट) होना अधिक पठनीय है, अन्यथा आप इसे इस तरह से कॉल कर सकते हैं: यदि ((.NotEmpty ($ x))) ... दूसरी ओर, isNotEmpty () और ((isEmpty ()) नहीं है) वह अलग है। YMMV।
जॉन्डोडो

1
एक नकारात्‍मक नाम के बिना एक ही कार्य करने के लिए, शायद हैसेंटेंट () जैसा कुछ हो।
ओसाकावेबी

! किडिफेंट @ जौंधोडो
कोडरत्चेत

यह निश्चित रूप से एक ऑफ विषय है: टाइपो प्रश्न।
मिकमैकुसा

जवाबों:


320

सरल समस्या वास्तव में। परिवर्तन:

if (strTemp != '')

सेवा

if ($strTemp != '')

संभवतः आप इसे इसे बदलना भी चाहें:

if ($strTemp !== '')

चूँकि != ''यदि आप पास हैं, तो यह 0 है और PHP के ऑटोमैटिक टाइप रूपांतरण के कारण कुछ अन्य मामलों में सही है ।

आपको इसके लिए अंतर्निहित खाली () फ़ंक्शन का उपयोग नहीं करना चाहिए ; टिप्पणियों और PHP प्रकार की तुलना तालिकाओं को देखें


4
यकीनन, अगर में बदल: $ $ strTemp! == '';
स्ट्रैजर

12
आप खाली () का उपयोग नहीं करना चाहते हैं। रिक्त स्थान की एक स्ट्रिंग पर विचार करें: $ x = ""; var_dump (खाली ($ x)!); / * (TRUE) / var_dump (isNotEmpty ($ x)); / (FALSE) * /
निकफ

5
ओपी स्ट्रिंग को ट्रिम कर रहा है। इस मामले में यह उपयुक्त है।
cletus

8
@ क्लेटस: फिर एक स्ट्रिंग $ s = '0' पर विचार करें। यदि आप खाली ($ s) कहते हैं तो यह सच का मूल्यांकन करेगा (सहज ज्ञान युक्त नहीं है, लेकिन ऐसा है)।
जॉन्डोडो

28
खाली () का उपयोग न करें! रिक्त () '0' जैसे मानों के लिए सही लौटेगा। Php.net/manual/en/types.comparison.php देखें
स्कॉट

27

PHP में एक अंतर्निहित फ़ंक्शन होता है जिसे empty() परीक्षण कहा जाता है if(empty($string)){...} संदर्भ php.net टाइप करके किया जाता है : php खाली


4
खाली संदर्भ कोलेटस से स्वीकृत उत्तर के अंत में पहले से ही है। साथ ही देखें कि यह प्रश्न और उत्तर धागा अप्रैल 2009 से है। वैसे भी आपके इनपुट के लिए धन्यवाद। मैं आपको पहले उत्तर के लिए +1 दे रहा हूं।
रेजिलेरो

64
खाली () का उपयोग न करें! रिक्त () '0' जैसे मानों के लिए सही लौटेगा। Php.net/manual/en/types.comparison.php
स्कॉट

3
@ScottDavidTesler यदि स्ट्रिंग "0" है तो क्या यह सच होगा? या केवल अगर यह पूर्णांक 0 है?
टॉमस ज़बिरी

5
@TomasZubiri हां, "0" युक्त एक स्ट्रिंग सही लौटेगी।
माइकल सुंदर

3
कृपया, कोई और इस गलत जवाब को आगे नहीं बढ़ाएगा - उपरोक्त टिप्पणियां पढ़ें!
टूलमेकरसैट

24

मैं हमेशा एक खाली स्ट्रिंग की जांच के लिए एक नियमित अभिव्यक्ति का उपयोग करता हूं, CGI / पर्ल दिनों में वापस डेटिंग करता हूं, और जावास्क्रिप्ट के साथ भी, इसलिए PHP के साथ भी नहीं, उदाहरण के लिए (यद्यपि अप्रयुक्त)

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

जहाँ \ _ किसी भी गैर-व्हाट्सएप चरित्र का प्रतिनिधित्व करता है


1
यह यहाँ एकमात्र समाधान है जो शून्य नहीं मानता है यह एक खाली स्ट्रिंग के समान है!
मैथ्यू लॉक

1
शांत समाधान। एक साइड नोट के रूप में, stackoverflow.com/a/4544642/5411817 उल्लेख: डिफ़ॉल्ट रूप से .नई लाइनों से मेल नहीं खाता है - [\s\S]उस समस्या के आसपास एक हैक है। यह जावास्क्रिप्ट में आम है, लेकिन PHP में आप /sसभी वर्णों के मिलान को बनाने के लिए ध्वज का उपयोग कर सकते हैं । और stackoverflow.com/a/4544646/5411817 का उल्लेख है: (?s)चालू हो जाता है sऔर मोड (?-s)बदल जाता है, तो बंद। एक बार बंद करने के बाद कोई भी .नई लाइन से मेल नहीं खाएगा। यदि आप स्विच को ऑन / ऑफ इनलाइन (रेगेक्स के अंदर एम्बेडेड) करना चाहते हैं, तो रेगेक्स फ्लैग के बजाय।
शेरलहोमन

19

ifफ़ंक्शन में आपके क्लॉज़ में, आप एक ऐसे चर का उल्लेख कर रहे हैं जो strTempमौजूद नहीं है। $strTempहालांकि मौजूद है।

लेकिन PHP में पहले से ही एक empty()फ़ंक्शन उपलब्ध है; अपना खुद का क्यों बना?

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

Php.net से:

वापसी मान

यदि कोई गैर-रिक्त और गैर-शून्य मान है तो FALSE लौटाता है।

निम्नलिखित चीजों को खाली माना जाता है:

* "" (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" का मूल्यांकन रिक्त के रूप में किया जाए। और अगर वह ऐसा चाहता था, तो क्या वह ($ x) तुलना अर्थात यदि (? ट्रिम ($ str)) का उपयोग नहीं कर सकता था?
केल्विन

1
ध्यान दें कि $ tmpStr करना! = '' $ TmpStr का 0 या गलत या दूसरा खाली / गलत मान रखने पर भी वापस आ जाएगा।
पिम जगर

5
आपका संस्करण वास्तव में काम नहीं करेगा: चर पर खाली कार्य, अभिव्यक्ति पर नहीं।
हाउंड

13

PHP एक खाली स्ट्रिंग का गलत मूल्यांकन करता है, इसलिए आप बस उपयोग कर सकते हैं:

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

9
यह ठीक काम करता है जब तक कि आप पेस नहीं करते हैं। अन्यथा यह विचार बहुत अच्छा है, मैं इसे कुछ अन्य स्थानों पर रखूंगा। आपके प्रतिक्रिया के लिए धन्येवाद।
bossalci

10

बस strlen () फ़ंक्शन का उपयोग करें

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

1
यह इस बात पर निर्भर करता है कि PHP किस प्रकार strlen () कार्य करता है। उदाहरण के लिए, डेल्फी में, स्ट्रिंग ने वास्तव में अपनी लंबाई माइनस 4 बाइट ऑफसेट को संग्रहीत किया है, इसलिए इसकी लंबाई की जांच तुच्छ है।
डॉक्टरलाई

5
टाइप सेव नहीं। Php 5.3फ़ंक्शन के पहले 5यदि $sप्रकार का है तो वापस आ जाएगाarrayPhp > 5.3एक अपवाद बढ़ जाएगा। मैं उपयोग करने की सलाह देता हूं is_string($s) && str_len($s) > 0>0सिर्फ पढ़ने के उद्देश्य से।
जादू_लाल

5

मैं सिर्फ अपने ही समारोह लिखते हैं, is_string प्रकार की जाँच के लिए और strlen लंबाई की जांच करने के लिए।

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

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

यहाँ एक छोटा सा परीक्षण repl.it है

संपादित करें: यदि स्ट्रिंग भी रिक्त है, तो आप परीक्षण करने के लिए ट्रिम फ़ंक्शन का उपयोग कर सकते हैं ।

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

1

मुझे PHP में एक खाली क्षेत्र के लिए परीक्षण करने की आवश्यकता है और इसका उपयोग किया जाता है

ctype_space($tempVariable)

जिसने मेरे लिए अच्छा काम किया।


यह एक अलग प्रश्न का सही उत्तर है। यदि कोई स्ट्रिंग खाली है, तो यह उत्तर जाँच नहीं करता है।
मिकमैकुसा

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 में चेकिंग की सिफारिश की गई थी। आपका उत्तर कोई नया मूल्य नहीं जोड़ता है।
मिकमैकुसा

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 बूलियन, अनुभाग "बूलियन में परिवर्तित" पढ़ें । इसके अलावा, आप इसे पीछे की ओर मिला - होना चाहिए !(bool)$string'। या आपके फ़ंक्शन का नाम "NotEmpty "होना चाहिए। भले ही, आप '0' के गलत हैंडलिंग के साथ फंस गए हों।
टूलमेकरसइट

@ToolmakerSteve 0समस्या के लिए बस उस स्ट्रिंग को वापस करने से पहले संभाल लें। और बहुत बहुत धन्यवाद, मैं उपेक्षा को भूल गया !(नकारात्मक फ़ंक्शन नाम खराब अभ्यास हैं)। मेरी पोस्ट संपादित की।
फेबियन पॉनिकन जूल

-1

मुझे पता है कि यह धागा बहुत पुराना हो चुका है लेकिन मैं अपने एक फंक्शन को साझा करना चाहता हूं। नीचे यह फ़ंक्शन रिक्त स्ट्रिंग्स, अधिकतम लंबाई के साथ स्ट्रिंग, न्यूनतम लंबाई या सटीक लंबाई की जांच कर सकता है। यदि आप खाली तारों की जांच करना चाहते हैं, तो $ 0 के रूप में $ min_len और $ max_len डालें।

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.ini में php कॉन्फ़िगरेशन के कारण है


-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 में इस पृष्ठ पर पहले से ही सिफारिश की गई थी।
मिकमैकुसा

-2

यह छोटा और प्रभावी उपाय है, जिसे आप ढूंढ रहे हैं:

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

मैंने परीक्षण नहीं किया है कि क्या यह काम करता है, लेकिन अगर ऐसा होता है, तो यह nullतुलना के लिए खाली स्ट्रिंग में परिवर्तित होगा । किस मामले में, यह कहने के लिए बहुत स्पष्ट होगा कि आपका क्या मतलब है $input > '':। यही है, "इनपुट स्ट्रिंग और एक खाली स्ट्रिंग के बीच एक शाब्दिक तुलना करें"। या अंत में व्हॉट्सएप को नजरअंदाज करना trim($input) > '':।
टूलमेकरसइट जूल

... यह भी परखने की जरूरत है कि कब क्या होता $inputहै '0'। स्पष्ट नहीं है कि क्या php एक numericया lexicalतुलना करता है , जब पहला तर्क एक संख्यात्मक स्ट्रिंग है।
टूलमेकरसइट

-3

आपको एक उत्तर मिला लेकिन आपके मामले में आप इसका उपयोग कर सकते हैं

return empty($input);

या

return is_string($input);

5
इसके लिए विफल रहता हैempty("0")
सक्रिय

2
@geekido - गलत उत्तरों को डाउनवोट करना, StackOverflow का हिस्सा है - यह उन उत्तरों को नीचे ले जाता है, और उत्तरदाताओं को उनके उत्तर को सही करने, या इसे हटाने के लिए प्रोत्साहित करता है। क्या आप समझते हैं कि आपके उत्तर में क्या गलत है? 1. empty- यह जवाब पहले ही दिया जा चुका है, इसलिए यह कहना फिर से कुछ भी योगदान नहीं देता है। इससे भी बदतर, जैसा कि टिप्पणियों में चर्चा की गई है, यह गलत है - किसी भी मूल्य के बराबर 0"खाली" माना जाएगा। 2. is_stringएक अलग तरीके से गलत है - एक खाली स्ट्रिंग ''एक स्ट्रिंग है, इसलिए उस मामले में सच लौटेगा - जो सवाल पूछता है वह करने में विफल रहता है।
टूलमेकरसइट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.