IsNullOrEmpty
पावरस् लेल में एक स्ट्रिंग नल या खाली है या नहीं, यह जांचने के लिए एक अंतर्निहित फ़ंक्शन है?
मैं इसे अभी तक नहीं ढूंढ सका और अगर कोई अंतर्निहित तरीका है, तो मैं इसके लिए एक फ़ंक्शन नहीं लिखना चाहता हूं।
String.IsNullOrEmpty
?
IsNullOrEmpty
पावरस् लेल में एक स्ट्रिंग नल या खाली है या नहीं, यह जांचने के लिए एक अंतर्निहित फ़ंक्शन है?
मैं इसे अभी तक नहीं ढूंढ सका और अगर कोई अंतर्निहित तरीका है, तो मैं इसके लिए एक फ़ंक्शन नहीं लिखना चाहता हूं।
String.IsNullOrEmpty
?
जवाबों:
आप IsNullOrEmpty
स्थैतिक विधि का उपयोग कर सकते हैं :
[string]::IsNullOrEmpty(...)
!
। यह केवल PowerShell के नए संस्करणों में काम करता है। !
के लिए एक उपनाम है-not
आप लोग इसे बहुत कठिन बना रहे हैं। PowerShell इसे बहुत ही सुरुचिपूर्ण ढंग से संभालता है जैसे:
> $str1 = $null
> if ($str1) { 'not empty' } else { 'empty' }
empty
> $str2 = ''
> if ($str2) { 'not empty' } else { 'empty' }
empty
> $str3 = ' '
> if ($str3) { 'not empty' } else { 'empty' }
not empty
> $str4 = 'asdf'
> if ($str4) { 'not empty' } else { 'empty' }
not empty
> if ($str1 -and $str2) { 'neither empty' } else { 'one or both empty' }
one or both empty
> if ($str3 -and $str4) { 'neither empty' } else { 'one or both empty' }
neither empty
IsNullOrWhitespace()
उस परिदृश्य के लिए उपयोग करने की सलाह देता हूं । लेकिन पॉवरशेल के साथ स्क्रिप्टिंग के 11 साल बाद, मुझे लगता है कि मुझे उस स्ट्रिंग टेस्ट की बहुत कम जरूरत है । :-)
के अलावा [string]::IsNullOrEmpty
क्रम में अशक्त के लिए जाँच करें या खाली आप स्पष्ट रूप से या बूलियन अभिव्यक्ति में एक बूलियन के लिए एक स्ट्रिंग कास्ट कर सकता है:
$string = $null
[bool]$string
if (!$string) { "string is null or empty" }
$string = ''
[bool]$string
if (!$string) { "string is null or empty" }
$string = 'something'
[bool]$string
if ($string) { "string is not null or empty" }
आउटपुट:
False
string is null or empty
False
string is null or empty
True
string is not null or empty
If
क्लॉज आंतरिक रूप से कोष्ठक के अंदर सब कुछ को एकल बूलियन में परिवर्तित करता है जिसका अर्थ है if($string){Things to do for non-empty-nor-null}
या if(!$string){Things to do for empty-or-null}
बिना स्पष्ट रूपांतरण [bool]
पर्याप्त होगा।
निजी तौर पर, मैं व्हॉट्सएप ($ STR3) को 'खाली नहीं' होने के रूप में स्वीकार नहीं करता हूं।
जब एक चर जिसमें केवल व्हाट्सएप होता है, एक पैरामीटर पर पारित किया जाता है, तो अक्सर यह त्रुटि होगी कि पैरामीटर मान '$ null' नहीं हो सकता है, यह कहने के बजाय कि यह व्हाट्सएप नहीं हो सकता है, कुछ हटाए गए कमांड के बजाय एक रूट फ़ोल्डर निकाल सकते हैं सबफ़ोल्डर यदि सबफ़ोल्डर नाम एक "सफेद स्थान" है, तो सभी कारण कई मामलों में व्हाट्सएप युक्त स्ट्रिंग को स्वीकार नहीं करते हैं।
मुझे लगता है कि यह इसे पूरा करने का सबसे अच्छा तरीका है:
$STR1 = $null
IF ([string]::IsNullOrWhitespace($STR1)){'empty'} else {'not empty'}
खाली
$STR2 = ""
IF ([string]::IsNullOrWhitespace($STR2)){'empty'} else {'not empty'}
खाली
$STR3 = " "
IF ([string]::IsNullOrWhitespace($STR3)){'empty !! :-)'} else {'not Empty :-('}
खाली करें !! :-)
$STR4 = "Nico"
IF ([string]::IsNullOrWhitespace($STR4)){'empty'} else {'not empty'}
खाली नहीं
मेरे पास एक पॉवरशेल स्क्रिप्ट है जिसे मुझे एक कंप्यूटर पर चलाना है, ताकि उसमें [स्ट्रिंग] :: IsNullOrWhiteSpace () न हो, इसलिए मैंने अपना लिखा।
function IsNullOrWhitespace($str)
{
if ($str)
{
return ($str -replace " ","" -replace "`t","").Length -eq 0
}
else
{
return $TRUE
}
}
# cases
$x = null
$x = ''
$x = ' '
# test
if ($x -and $x.trim()) {'not empty'} else {'empty'}
or
if ([string]::IsNullOrWhiteSpace($x)) {'empty'} else {'not empty'}
PowerShell 2.0 के लिए प्रतिस्थापन [string]::IsNullOrWhiteSpace()
हैstring -notmatch "\S"
(" \ _ " = कोई भी गैर-व्हाट्सएप चरित्र)
> $null -notmatch "\S"
True
> " " -notmatch "\S"
True
> " x " -notmatch "\S"
False
प्रदर्शन बहुत करीब है:
> Measure-Command {1..1000000 |% {[string]::IsNullOrWhiteSpace(" ")}}
TotalMilliseconds : 3641.2089
> Measure-Command {1..1000000 |% {" " -notmatch "\S"}}
TotalMilliseconds : 4040.8453
शुद्ध पॉवरशेल तरीके से इसे पूरा करने का एक और तरीका कुछ इस तरह होगा:
("" -eq ("{0}" -f $val).Trim())
यह अशक्त, खाली स्ट्रिंग और व्हॉट्सएप के लिए सफलतापूर्वक मूल्यांकन करता है। मैं रिक्त मान को रिक्त स्ट्रिंग में अशक्त करने के लिए प्रारूपित कर रहा हूं (अन्यथा ट्रिम कहे जाने पर एक अशक्त त्रुटि पैदा करेगा)। फिर बस एक खाली स्ट्रिंग के साथ समानता का मूल्यांकन करें। मुझे लगता है कि मैं अभी भी IsNullOrWhiteSpace को पसंद करता हूं, लेकिन अगर आप इसे करने के लिए एक और रास्ता तलाश रहे हैं, तो यह काम करेगा।
$val = null
("" -eq ("{0}" -f $val).Trim())
>True
$val = " "
("" -eq ("{0}" -f $val).Trim())
>True
$val = ""
("" -eq ("{0}" -f $val).Trim())
>True
$val = "not null or empty or whitespace"
("" -eq ("{0}" -f $val).Trim())
>False
बोरियत के एक फिट में, मैंने कुछ के साथ खेला और इसे कम कर दिया (यद्यपि अधिक गूढ़)
!!(("$val").Trim())
या
!(("$val").Trim())
आप क्या करने की कोशिश कर रहे हैं पर निर्भर करता है।
ध्यान दें कि "if ($str)"
और "IsNullOrEmpty"
परीक्षण सभी उदाहरणों में समान रूप से काम नहीं करते हैं: $str=0
दोनों के लिए असत्य का उत्पादन करने का एक असाइनमेंट , और इच्छित कार्यक्रम शब्दार्थ के आधार पर, यह एक आश्चर्य पैदा कर सकता है।
लंबाई जांचें। यदि वस्तु मौजूद है, तो उसकी लंबाई होगी।
अशक्त वस्तुओं की कोई लंबाई नहीं है, मौजूद नहीं है, और जाँच नहीं की जा सकती है।
स्ट्रिंग ऑब्जेक्ट की लंबाई है।
सवाल यह था: IsNull या IsEmpty, IsNull या IsEmpty या IsWhiteSpace नहीं
#Null
$str1 = $null
$str1.length
($str1 | get-member).TypeName[0]
# Returns big red error
#Empty
$str2 = ""
$str2.length
($str2 | get-member).TypeName[0]
# Returns 0
## Whitespace
$str3 = " "
$str3.length
($str3 | get-member).TypeName[0]
## Returns 1
Null objects have no length
- क्या आपने निष्पादन की कोशिश की है $null.length
? :-) एक त्वरित बूल परीक्षण के लिए, गेट-मेंबर में पाइपिंग करना और फिर $ null मामले के लिए परिणामी त्रुटि को संभालना है जो मुझे थोड़ा भारी लगता है।