C#のIsNullOrWhiteSpaceとは?null・空文字・空白判定の使い方とIsNullOrEmptyとの違い

はじめに

C#で文字列を扱うときは、「値がnullではないか」「空文字ではないか」「空白だけで構成されていないか」を確認する場面がよくあります。

たとえば、ユーザーが入力フォームにスペースだけを入力した場合、文字数は0ではないため、空文字との比較だけでは未入力として判定できません。このようなケースで役立つのが、string.IsNullOrWhiteSpaceメソッドです。

C#
string input = "   ";

if (string.IsNullOrWhiteSpace(input))
{
Console.WriteLine("有効な文字が入力されていません。");
}

IsNullOrWhiteSpaceを使うと、null、空文字、空白文字だけの文字列をまとめて判定できます。本記事では、C#のIsNullOrWhiteSpaceの基本的な使い方や判定結果、IsNullOrEmptyとの違い、使用時の注意点を解説します。

1. C#のIsNullOrWhiteSpaceとは

IsNullOrWhiteSpaceは、指定した文字列が次のいずれかに該当するかを判定するための静的メソッドです。

  • null

  • 空文字

  • 空白文字だけで構成された文字列

基本構文は次のとおりです。

C#
bool result = string.IsNullOrWhiteSpace(value);

引数valueに判定したい文字列を指定します。文字列がnull、空文字、または空白文字だけの場合はtrue、それ以外の場合はfalseを返します。

C#
string? value = null;

bool result = string.IsNullOrWhiteSpace(value);

Console.WriteLine(result); // True

nullを判定する

変数にnullが代入されている場合、IsNullOrWhiteSpacetrueを返します。

C#
string? text = null;

if (string.IsNullOrWhiteSpace(text))
{
Console.WriteLine("文字列はnullです。");
}

IsNullOrWhiteSpaceはnullを安全に判定できるため、事前に次のようなnullチェックを書く必要はありません。

C#
if (text == null || string.IsNullOrWhiteSpace(text))
{
// 処理
}

IsNullOrWhiteSpace自体がnullを判定するので、次のように記述するだけで十分です。

C#
if (string.IsNullOrWhiteSpace(text))
{
// 処理
}

空文字を判定する

長さが0の空文字もtrueになります。

C#
string text = "";

Console.WriteLine(string.IsNullOrWhiteSpace(text)); // True

空文字はstring.Emptyを使って表すこともできます。

C#
string text = string.Empty;

Console.WriteLine(string.IsNullOrWhiteSpace(text)); // True

""string.Emptyは、どちらも長さが0の文字列です。そのため、IsNullOrWhiteSpaceでは同じ判定結果になります。

スペースだけの文字列を判定する

半角スペースだけで構成された文字列もtrueになります。

C#
string text = "   ";

Console.WriteLine(string.IsNullOrWhiteSpace(text)); // True

文字列の中に空白以外の文字が1文字でも含まれていれば、結果はfalseです。

C#
string text = "  C#  ";

Console.WriteLine(string.IsNullOrWhiteSpace(text)); // False

文字列の前後に空白があっても、C#という有効な文字が含まれているため、空白文字だけの文字列とは判定されません。

タブや改行を判定する

IsNullOrWhiteSpaceが判定する空白文字は、半角スペースだけではありません。タブや改行なども空白文字として扱われます。

C#
Console.WriteLine(string.IsNullOrWhiteSpace("\t"));   // True
Console.WriteLine(string.IsNullOrWhiteSpace("\n")); // True
Console.WriteLine(string.IsNullOrWhiteSpace("\r\n")); // True

複数の空白文字が組み合わされている場合も、すべてが空白文字であればtrueです。

C#
string text = " \t\r\n";

Console.WriteLine(string.IsNullOrWhiteSpace(text)); // True

全角スペースを判定する

全角スペースも空白文字として判定されます。

C#
string text = " ";

Console.WriteLine(string.IsNullOrWhiteSpace(text)); // True

半角スペースと全角スペースが混在している場合も、結果はtrueです。

C#
string text = "  ";

Console.WriteLine(string.IsNullOrWhiteSpace(text)); // True

日本語の入力フォームでは、利用者が全角スペースだけを入力する可能性があります。text == ""のような比較では全角スペースを検出できませんが、IsNullOrWhiteSpaceなら未入力としてまとめて判定できます。

IsNullOrWhiteSpaceの判定結果一覧

主な文字列に対する判定結果は次のとおりです。

文字列内容判定結果
nullnulltrue
""空文字true
" "半角スペースtrue
" "全角スペースtrue
"\t"タブtrue
"\n"改行true
"C#"通常の文字列false
" C# "前後に空白がある文字列false

実際のコードで確認すると、次のようになります。

C#
string?[] values =
{
null,
"",
" ",
" ",
"\t",
"\n",
"C#",
" C# "
};

foreach (string? value in values)
{
bool result = string.IsNullOrWhiteSpace(value);
Console.WriteLine($"{value ?? "null"}: {result}");
}

IsNullOrWhiteSpaceの実用例

IsNullOrWhiteSpaceは、フォームやコンソールから受け取った入力値の検証に適しています。

C#
Console.Write("名前を入力してください: ");
string? name = Console.ReadLine();

if (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("名前は必須です。");
}
else
{
Console.WriteLine($"こんにちは、{name.Trim()}さん。");
}

このコードでは、入力値がnull、空文字、空白だけのいずれかであればエラーメッセージを表示します。

有効な文字が入力されている場合は、Trimメソッドで前後の空白を取り除いてから利用しています。

ASP.NET Coreで入力値をチェックする例

Webアプリケーションでも、IsNullOrWhiteSpaceを使って入力値を検証できます。

C#
public IActionResult Register(string? userName)
{
if (string.IsNullOrWhiteSpace(userName))
{
ModelState.AddModelError(
nameof(userName),
"ユーザー名を入力してください。"
);

return View();
}

string normalizedUserName = userName.Trim();

// 登録処理
return RedirectToAction("Complete");
}

ブラウザ側で必須入力を設定していても、サーバー側の検証は必要です。入力値をデータベースに保存したり、業務処理に使用したりする前に、IsNullOrWhiteSpaceで確認すると安全です。

IsNullOrEmptyとの違い

IsNullOrWhiteSpaceと似たメソッドに、string.IsNullOrEmptyがあります。

IsNullOrEmptytrueを返すのは、文字列がnullまたは空文字の場合です。スペースだけの文字列は空文字ではないため、falseになります。

C#
string text = "   ";

Console.WriteLine(string.IsNullOrEmpty(text)); // False
Console.WriteLine(string.IsNullOrWhiteSpace(text)); // True

それぞれの違いは次のとおりです。

文字列IsNullOrEmptyIsNullOrWhiteSpace
nulltruetrue
""truetrue
" "falsetrue
" "falsetrue
"\t"falsetrue
"C#"falsefalse

入力必須項目のチェックでは、スペースだけの入力も無効にするケースが一般的です。そのため、ユーザー入力の検証にはIsNullOrWhiteSpaceが適しています。

一方、空白だけの文字列を有効なデータとして扱い、nullと長さ0の文字列だけを判定したい場合は、IsNullOrEmptyを使用します。

TrimとIsNullOrEmptyを組み合わせる方法との違い

空白だけの文字列は、TrimIsNullOrEmptyを組み合わせても判定できます。

C#
string? text = "   ";

bool result = string.IsNullOrEmpty(text?.Trim());

Console.WriteLine(result); // True

ただし、単にnull、空文字、空白だけの文字列を判定したいのであれば、IsNullOrWhiteSpaceを使うほうが意図を明確に表現できます。

C#
bool result = string.IsNullOrWhiteSpace(text);

コードも短くなり、null条件演算子やTrimを個別に記述する必要がありません。

なお、IsNullOrWhiteSpaceは判定を行うメソッドであり、元の文字列から空白を削除するわけではありません。

C#
string text = " C# ";

bool result = string.IsNullOrWhiteSpace(text);

Console.WriteLine(result); // False
Console.WriteLine($"[{text}]"); // [ C# ]

前後の空白を削除したい場合は、別途Trimを使用します。

C#
string text = " C# ";
string trimmedText = text.Trim();

Console.WriteLine($"[{trimmedText}]"); // [C#]

否定演算子を使って有効な文字列を判定する

文字列がnull、空文字、空白だけのいずれでもないことを確認する場合は、否定演算子!を付けます。

C#
string? text = "C#";

if (!string.IsNullOrWhiteSpace(text))
{
Console.WriteLine("有効な文字列です。");
}

この書き方は、「有効な入力がある場合だけ処理を実行する」ときに便利です。

C#
if (!string.IsNullOrWhiteSpace(userName))
{
SaveUserName(userName.Trim());
}

IsNullOrWhiteSpacefalseになった分岐では、対象の変数がnullではないことも確認されています。nullable参照型を有効にしている環境でも、条件分岐後のコードを安全に記述しやすくなります。

複数項目をまとめて判定する

複数の入力項目がすべて入力されているか確認する場合にも使用できます。

C#
string? firstName = "Taro";
string? lastName = "Yamada";
string? email = "taro@example.com";

if (string.IsNullOrWhiteSpace(firstName) ||
string.IsNullOrWhiteSpace(lastName) ||
string.IsNullOrWhiteSpace(email))
{
Console.WriteLine("必須項目をすべて入力してください。");
}
else
{
Console.WriteLine("入力内容は有効です。");
}

配列やリストに格納されている文字列をLINQで確認することもできます。

C#
string?[] inputs =
{
"Taro",
"Yamada",
"taro@example.com"
};

bool hasInvalidValue = inputs.Any(string.IsNullOrWhiteSpace);

if (hasInvalidValue)
{
Console.WriteLine("未入力の項目があります。");
}

すべての値が有効であることを確認する場合は、Allと否定演算子を組み合わせます。

C#
bool allValid = inputs.All(
value => !string.IsNullOrWhiteSpace(value)
);

Console.WriteLine(allValid);

IsNullOrWhiteSpaceを使う際の注意点

IsNullOrWhiteSpaceは、文字列が空白だけかどうかを判定します。しかし、文字列の内容が用途に適しているかまでは検証しません。

たとえば、次の文字列は空白ではないため、判定結果がfalseになります。

C#
string email = "abc";

Console.WriteLine(string.IsNullOrWhiteSpace(email)); // False

この結果は「メールアドレスとして正しい」という意味ではありません。メールアドレス、電話番号、数値、日付などを検証する場合は、IsNullOrWhiteSpaceによる必須チェックに加えて、形式や値の範囲も確認する必要があります。

また、空白ではない不可視文字や制御文字が含まれる可能性もあります。厳密な入力制限が必要なシステムでは、許可する文字の種類や文字数なども個別に検証してください。

まとめ

C#のstring.IsNullOrWhiteSpaceは、文字列がnull、空文字、または空白文字だけで構成されているかをまとめて判定するメソッドです。

C#
if (string.IsNullOrWhiteSpace(value))
{
// null、空文字、空白だけの場合の処理
}

IsNullOrEmptyはnullと空文字を判定しますが、スペース、タブ、改行、全角スペースだけの文字列は検出しません。空白だけの入力も未入力として扱いたい場合は、IsNullOrWhiteSpaceを使用するのが適切です。

ユーザー入力を処理するときは、まずIsNullOrWhiteSpaceで必須チェックを行い、必要に応じてTrimによる前後の空白除去や、文字数・形式・値の範囲に関する検証を追加しましょう。