👩🚀
PowerShellでNull・空白のみ・空文字をチェックする3つの方法
概要
これまでPowerShellの文字列をチェックする際、コードを統一できていませんでした。
今後は使用用途ごとにある程度は統一化したいと思い、Null・空白のみ・空文字のチェック方法を洗い出してみました。
この記事のターゲット
- PowerShellユーザーの方
- 特定の文字列で
Null
や空白(スペース)のみ
、空文字
をチェックしたい方
対応方法
Null
や空白
、空文字
の概念があいまいな方は、こちらの記事をご参照ください。
(ブランク
は言語により解釈が異なり混乱を避ける為、あえて使用していません。)
文字列を検証するメソッドでチェックする方法
PowerShellでは文字列を検証する[System.String]::IsNullOr
ではじまるメソッドを使用することで、
文字列を簡単にチェック可能。
以下が早見表です。
メソッド名 | 説明 | 備考 |
---|---|---|
[System.String]::IsNullOrEmpty |
対象の文字列が Null または 空文字 の場合に True を返す。空白のみ の文字列は該当しないため、False で返す。 |
最初のデータ型を省略し、[string]::IsNullOrEmpty という表記でも問題なく動作する。 |
[System.String]::IsNullOrWhiteSpace |
対象の文字列が Null または 空白のみ または 空文字 の場合に True を返す。 |
文字のなかに空文字 を含んでいない為、メソッド名がわかりにくい。もしかすると WhiteSpace の意味に空白のみ と空文字 の2つの意味が含まれているのかもしれない。上記と同様に最初のデータ型は簡易な表記に省略可能。 |
それぞれのメソッドだけで検証した結果
“Nullと空文字”をチェック可能な「IsNullOrEmptyメソッド」
# ⭕:Null は True
PS C:\WINDOWS\system32> [System.String]::IsNullOrEmpty($null)
True
PS C:\WINDOWS\system32>
# ⭕:空文字 も True
PS C:\WINDOWS\system32> [System.String]::IsNullOrEmpty('')
True
PS C:\WINDOWS\system32>
# ❌:空白のみ は False
PS C:\WINDOWS\system32> [System.String]::IsNullOrEmpty(' ')
False
PS C:\WINDOWS\system32>
# ❌:文字あり だと False
PS C:\WINDOWS\system32> [System.String]::IsNullOrEmpty(' a ')
False
PS C:\WINDOWS\system32>
“Nullと空文字と空文字のみ”をチェック可能な「IsNullOrWhiteSpaceメソッド」
# ⭕:Null は True
PS C:\WINDOWS\system32> [System.String]::IsNullOrWhiteSpace($null)
True
PS C:\WINDOWS\system32>
# ⭕:空文字 も True
PS C:\WINDOWS\system32> [System.String]::IsNullOrWhiteSpace('')
True
PS C:\WINDOWS\system32>
# ⭕:空白のみ も True
PS C:\WINDOWS\system32> [System.String]::IsNullOrWhiteSpace(' ')
True
PS C:\WINDOWS\system32>
# ❌:文字あり だと False
PS C:\WINDOWS\system32> [System.String]::IsNullOrWhiteSpace(' a ')
False
PS C:\WINDOWS\system32>
IsNullOrEmptyメソッドでNullと空文字だけチェックする方法
IsNullOrEmptyメソッドでチェックするFunction
# 値の設定
$printString = ''
#$printString = ' '
#$printString = $null
# IsNullOrEmptyメソッドで空文字・Nullのチェック
if ([System.String]::IsNullOrEmpty($printString)) {
Write-Warning '「Null or 空文字」のためエラー。'
return
}
# 値を標準出力
Write-Output $printString
IsNullOrWhiteSpaceメソッドで一気にすべてチェックする方法
IsNullOrWhiteSpaceメソッドでチェックするFunction
# 値の設定
$printString = ''
#$printString = ' '
#$printString = $null
# IsNullOrWhiteSpaceメソッドで空文字・空白のみ・Nullのチェック
if ([System.String]::IsNullOrWhiteSpace($printString)) {
Write-Warning '「Null or 空白のみ or 空文字」のためエラー。'
return
}
# 値を標準出力
Write-Output $printString
if文で段階的にチェックする方法
段階的にif文でチェックするFunction
# 値の設定
$printString = ''
#$printString = ' '
#$printString = $null
# 複数のif文で空文字・空白のみ・Nullのチェック
# Nullチェック
if ($null -eq $printString) {
Write-Warning '値がNull。'
return
}
# 空文字をチェック
elseif ($printString -eq '') {
Write-Warning '値が空文字。'
return
}
# 空白のみをチェック
elseif ($printString.Trim() -eq '') {
Write-Warning '値が空白のみ。'
return
}
# 空文字と空白のみを一度にチェックしたい場合は下記のとおり。
# elseif ($printString.Trim() -eq '') {
# Write-Warning '値が空文字、または空白のみ。'
# return
# }
# 値を標準出力
Write-Output $printString
Functionの引数で指定された値をチェックする方法
Functionの引数で指定された値をチェックするFunction
function Write-String {
param (
[Parameter(Mandatory=$true)]
# Functionの仕様で引数の値がNullと空文字はエラーとなる。空白のみをチェックすることで全てを網羅。
[ValidateScript({ ($_.Trim() -ne '') })]
[System.String]$PrintSring
)
# 値を標準出力
Write-Output $PrintSring
}
他にも正規表現を使う方法や自作Function(カスタム関数)を使う方法も思いつきましたが、
現実的な方法ではないと判断し、ここで紹介するのは割愛します。
参考記事
まとめ
- 下記3つの方法を紹介しました。
- 文字列を検証するメソッドでチェックする方法
- 段階的にif文でチェックする方法
- Functionの引数で指定された値をチェックする方法
この3つの中で一番使用頻度が高いのは 文字列を検証するメソッド を使用する方法でしょう。
ご自身が作成するスクリプトやFunctionに合わせてカスタマイズしてみてください!
関連記事
Discussion