PowerShell で、文字列が null または空であるかどうかを確認するための組み込みのIsNullOrEmpty
ような関数はありますか?
これまでのところ見つけられませんでした。組み込みの方法があれば、そのための関数を書きたくありません。
PowerShell で、文字列が null または空であるかどうかを確認するための組み込みのIsNullOrEmpty
ような関数はありますか?
これまでのところ見つけられませんでした。組み込みの方法があれば、そのための関数を書きたくありません。
あなたたちはこれを難しくしすぎています。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
IsNullOrEmpty
静的メソッドを使用できます。
[string]::IsNullOrEmpty(...)
nullまたは空をチェックするために加えて[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
関数内のパラメーターである場合は、次のValidateNotNullOrEmpty
例でわかるように検証できます。
Function Test-Something
{
Param(
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[string]$UserName
)
#stuff todo
}
個人的には、空白 ($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'}
空ではない
純粋な PowerShell の方法でこれを達成する別の方法は、次のようにすることです。
("" -eq ("{0}" -f $val).Trim())
これは、null、空の文字列、および空白について正常に評価されます。null を処理するために、渡された値を空の文字列にフォーマットしています (そうしないと、Trim が呼び出されたときに null によってエラーが発生します)。次に、空の文字列で等価性を評価します。私はまだ 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
。