यह जांचने का सबसे आसान तरीका है कि क्या स्ट्रिंग अशक्त या खाली है


87

मुझे यह कोड मिला है जो खाली या अशक्त स्ट्रिंग की जांच करता है। यह परीक्षण में काम कर रहा है।

eitherStringEmpty= (email, password) ->
  emailEmpty = not email? or email is ''
  passwordEmpty = not password? or password is ''
  eitherEmpty = emailEmpty || passwordEmpty         

test1 = eitherStringEmpty "A", "B" # expect false
test2 = eitherStringEmpty "", "b" # expect true
test3 = eitherStringEmpty "", "" # expect true
alert "test1: #{test1} test2: #{test2} test3: #{test3}"

मैं सोच रहा था कि क्या कोई बेहतर तरीका है not email? or email is ''। क्या मैं string.IsNullOrEmpty(arg)एक कॉल के साथ CoffeeScript में C # के बराबर कर सकता हूं ? मैं हमेशा इसके लिए एक फ़ंक्शन को परिभाषित कर सकता था (जैसे मैंने किया था) लेकिन मैं सोच रहा था कि क्या भाषा में कुछ ऐसा है जो मुझे याद आ रहा है।

जवाबों:


118

हाँ:

passwordNotEmpty = not not password

या इससे कम:

passwordNotEmpty = !!password

1
यह दो उत्तरों का अधिक "जावास्क्रिप्ट-वाई" है। विशेष रूप से यदि आप !!संस्करण का उपयोग करते हैं , जो अनिवार्य रूप से बूलियन को डाली जाती है। अगर यह मायने रखता है, तो यह निश्चित रूप से एक फ़ंक्शन को परिभाषित करने की तुलना में अधिक तेज़ है जैसा कि जेरेमी ने सुझाव दिया था।
एरोन डुफोर 22

वे सभी काम करते हैं, लेकिन यह सबसे ऊपर चढ़ गया। मुझे पठनीयता के लिए stackoverflow.com/q/8127920/30946 पसंद है ।
२२:१० पर jcollum

3
यह सभी स्थानों के साथ स्ट्रिंग के लिए विफल रहता है ... तो रिक्त स्थान के लिए काम नहीं करता है
अरखितेक

1
@ अरिष्टेक रिक्त खाली के समान नहीं है, इसलिए यह काम करता है।
जेकलूम

2
पठनीयता में मेरे स्वाद के लिए बहुत "चतुर"; मुझे नहीं लगता कि मैं इसका इस्तेमाल करूंगा, लेकिन अच्छा काम हालांकि
PANDWood

37

यह पूरी तरह से समतुल्य नहीं है, लेकिन गैर-शून्य email?.lengthहोने पर केवल सत्य ही होगा emailऔर गैर-शून्य .lengthसंपत्ति है। यदि आप notइस मूल्य को मानते हैं तो परिणाम को व्यवहार करना चाहिए जैसा कि आप तार और सरणियों दोनों के लिए चाहते हैं।

यदि कोई emailहै nullया नहीं है .length, तो email?.lengthमूल्यांकन करेगा null, जो कि गलत है। यदि ऐसा होता है .lengthतो यह मान उसकी लंबाई का मूल्यांकन करेगा, जो खाली होने पर गलत होगा।

आपका कार्य निम्नानुसार कार्यान्वित किया जा सकता है:

eitherStringEmpty = (email, password) ->
  not (email?.length and password?.length)

1
@pyrotechnick सवाल ने स्ट्रिंग्स से एरे को अलग करने के बारे में नहीं पूछा। इसने अशक्त मूल्यों और गैर-रिक्त तारों से रिक्त तारों को अलग करने के बारे में पूछा। मेरा कहना था कि यह कोड शून्य मानों और रिक्त सरणियों को गैर-रिक्त सरणियों से अलग कर सकता है, लेकिन यह प्रश्न के दायरे से परे था।
जेरेमी

फिर भी, आपके द्वारा दी गई विधि के लिए "या तोStringEmpty" एक गलत नाम है।
आतिशबाज़ी

14

यह एक ऐसा मामला है जहां "सच्चाई" काम आती है। आपको इसके लिए किसी फ़ंक्शन को परिभाषित करने की आवश्यकता नहीं है:

test1 = not (email and password)

यह काम क्यों करता है?

'0'       // true
'123abc'  // true
''        // false
null      // false
undefined // false

1
मुझे लगता है कि आप पहले से ही .trim()अपने सत्यापन तर्क के भाग के रूप में मूल्य पर कह चुके हैं । उत्तर सिंटैक्स के बारे में अधिक है।
रिकार्डो टोमासी

5
unless email? and email
  console.log 'email is undefined, null or ""'

पहले जाँच लें कि क्या ईमेल अपरिभाषित नहीं है और अस्तित्वगत ऑपरेटर के साथ अशक्त नहीं है, तो यदि आप जानते हैं कि यह मौजूद है तो and emailकेवल ईमेल ईमेल के खाली होने पर वह गलत हो जाएगा।



1

यदि आपको यह जांचने की आवश्यकता है कि सामग्री एक स्ट्रिंग है, शून्य नहीं है और एक सरणी नहीं है, तो एक सरल टाइपो तुलना का उपयोग करें:

 if typeof email isnt "string"

typeof email isnt "string"दोनों के लिए झूठे रिटर्न ''और'a'
jcollum

1

यहाँ एक jsfiddle ने यह करने का एक बहुत आसान तरीका प्रदर्शित किया है।

मूल रूप से आप बस ऐसा करते हैं जावास्क्रिप्ट:

var email="oranste";
var password="i";

if(!(email && password)){
    alert("One or both not set");        
}
else{
    alert("Both set");   
}

ताबूत में:

email = "oranste"
password = "i"
unless email and password
  alert "One or both not set"
else
  alert "Both set"

आशा है कि यह किसी की मदद करता है :)


1

मुझे लगता है कि प्रश्न चिह्न किसी चीज़ पर फ़ंक्शन को कॉल करने का सबसे आसान तरीका है यदि चीज़ मौजूद है।

उदाहरण के लिए

car = {
  tires: 4,
  color: 'blue' 
}

आप रंग प्राप्त करना चाहते हैं, लेकिन केवल अगर कार मौजूद है ...

coffeescript:

 car?.color

जावास्क्रिप्ट में अनुवाद:

if (car != null) {
  car.color;
}

इसे अस्तित्व संचालक http://coffeescript.org/documentation/docs/grammar.html#section-63 कहा जाता है


अस्तित्व की जाँच के लिए रिक्त स्ट्रिंग सही है।
jcollum

1

मुझे पूरा यकीन है कि @thejh का जवाब खाली स्ट्रिंग BUT की जांच करने के लिए काफी अच्छा था, मुझे लगता है कि हमें अक्सर यह जांचने की आवश्यकता है कि क्या इसका अस्तित्व है? ' और फिर हमें जांचने की जरूरत है 'क्या यह खाली है? स्ट्रिंग, सरणी और ऑब्जेक्ट शामिल करें '

यह कॉफीस्क्रिप्ट के लिए ऐसा करने का छोटा तरीका है।

tmp? and !!tmp and !!Object.keys(tmp).length

यदि हम इस प्रश्न को क्रम में रखते हैं, तो इस आदेश द्वारा जाँच की जाएगी। क्या यह मौजूद है? 2. खाली स्ट्रिंग नहीं? 3. खाली वस्तु नहीं?

इसलिए अस्तित्व में नहीं होने की स्थिति में भी सभी चर के लिए कोई समस्या नहीं थी।



0

स्वीकृत उत्तर के बजाय passwordNotEmpty = !!passwordआप उपयोग कर सकते हैं

passwordNotEmpty = if password then true else false

यह समान परिणाम (केवल सिंटैक्स में अंतर) देता है।

पहले कॉलम में एक मान है, दूसरे में इसका परिणाम है if value:

0 - false
5 - true
'string' - true
'' - false
[1, 2, 3] - true
[] - true
true - true
false - false
null - false
undefined - false
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.