👩‍🚀

PowerShellでNull・空白のみ・空文字をチェックする3つの方法

2024/07/10に公開

概要

これまで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(カスタム関数)を使う方法も思いつきましたが、
現実的な方法ではないと判断し、ここで紹介するのは割愛します。

参考記事

https://haretokidoki-blog.com/pasocon_program-db_null-karamoji/

まとめ

  • 下記3つの方法を紹介しました。
    • 文字列を検証するメソッドでチェックする方法
    • 段階的にif文でチェックする方法
    • Functionの引数で指定された値をチェックする方法

この3つの中で一番使用頻度が高いのは 文字列を検証するメソッド を使用する方法でしょう。
ご自身が作成するスクリプトやFunctionに合わせてカスタマイズしてみてください!

関連記事

https://haretokidoki-blog.com/pasocon_powershell-startup/
https://zenn.dev/haretokidoki/articles/7e6924ff0cc960
https://zenn.dev/haretokidoki/articles/fb6830f9155de5

GitHubで編集を提案

Discussion