質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

5469閲覧

C# TextBox内のスペースの判定

maam

総合スコア55

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2019/01/16 01:51

WindowsFormを使用して画面を作っています。
姓と名を入力するTextBoxをそれぞれ準備しています。
ここに入力した情報をDBに登録するのですが、
全角/半角スペースのみが入力されていたら”スペースのみは不可です”とエラーを出したいです。

C#

1string sei = textSei.Text; 2string mei = textMei.Text; 3 4 //必須項目の判定 5if (sei == "" || mei == "") 6 { 7 //姓が空欄の時 8 if (sei == "") 9 { 10 label9.Text = "必須入力項目です。"; 11 textSei.BackColor = Color.MistyRose; 12 }else 13 { 14 label9.Text = ""; 15 textSei.BackColor = Color.White; 16 } 17    //名が空欄の時 18 if (mei == "") 19 { 20 label10.Text = "必須入力項目です。"; 21 textMei.BackColor = Color.MistyRose; 22 }else 23 { 24 label10.Text = ""; 25 textMei.BackColor = Color.White; 26 } 27 return; 28 } 29 label9.Text = ""; 30 textSei.BackColor = Color.White; 31 label10.Text = ""; 32 textMei.BackColor = Color.White; 33 34 //姓と名のスペースの判定 35 string Sei = sei.Replace(" ", " "); 36 string Mei = mei.Replace(" ", " "); 37

いろいろ調べるとReplaceを使うということは分かりました。
変数SeiとMeiに
・文字が入力されていなかったら(スペースのみだったら)エラーを出す
・文字とスペースの両方が入力されている場合スペースを削除する
という処理をするにはどうしたらよいですか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

中間にあるスペースは対応できませんが、基本的に空であるかの比較は

csharp

1if(string.IsNullOrWhiteSpace(sei)) {;} // この場合空でもスペースでも一緒に反応してしまうので、メッセージは変更したほうがいいかもしれません。

などとすべきだと思います(IsNullOrEmptyもありますが、今回はこちらで)。

両端の空白を削るのは、既に回答があるとおり、Trim()です。


中間の空白を排除する方法

csharp

1string firstName = string.Join("", mei.Where(!char.IsWhiteSpace)); 2bool isFirstNameConstructedOnluByWhiteSpace = mei.All(char.IsWhiteSpace);

投稿2019/01/16 02:10

編集2019/01/16 02:34
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2019/01/16 02:41

批判のいとじゃないのでこっちに書きますが、charにおけるWhiteSpaceっていうのはいわゆるスペースと全角空白だけじゃないです。Trim()したときに削られるのもWhiteSpaceと同じ文字群です。言語標準の機能で対処したほうがいいと思います。
takabosoft

2019/01/16 02:57

補足ありがとうございます。たしかタブや改行コードなんかも含まれた気がしますね。ちょっと引用させてください。
runny_nose

2019/01/16 03:22

おお!たしかにそうですね! 私の回答にも使用させてください!
guest

0

ベストアンサー

同様の判定を複数回つかうようなら、
例えば下記のような拡張メソッドを使用するのも手だと思います。

RemoveWhiteSpace()の処理方法はpapinianusさんが指摘されている内容に変更しました。(System.Linqの参照が必要です。)

csharp

1using System.Linq; 2 3public static class StringExtensions 4{ 5  /// <summary> 6 /// この文字列が空白文字だけで構成されているかどうかを示します。 7 /// </summary> 8 /// <param name="str"></param> 9 /// <returns></returns> 10 public static bool IsWhiteSpaceOnly(this string str) 11 { 12 return !str.IsNullOrEmpty() && str.IsNullOrWhiteSpace(); 13 } 14 15 /// <summary> 16 /// この文字列が null または System.String.Empty 文字列であるかどうかを示します。 17 /// </summary> 18 /// <param name="str"></param> 19 public static bool IsNullOrEmpty(this string str) 20 { 21 return string.IsNullOrEmpty(str); 22 } 23 24 /// <summary> 25 /// この文字列が null または空であるか、空白文字だけで構成されているかどうかどうかを示します。 26 /// </summary> 27 /// <param name="str"></param> 28 public static bool IsNullOrWhiteSpace(this string str) 29 { 30 return string.IsNullOrWhiteSpace(str); 31 } 32   33 /// <summary> 34 /// この文字列から半角/全角スペースを取り除いた文字列を返却します。 35 /// </summary> 36 /// <param name="str"></param> 37  public static string RemoveWhiteSpace(this string str) 38 { 39 return string.Join("", str.Where(c => !char.IsWhiteSpace(c))); 40 } 41}

考え方としては、

  • string.IsNullOrEmptyは「文字列がnullもしくは空文字("")かどうか」
  • string.IsNullOrWhiteSpaceは「文字列がnullもしくは空文字("")もしくは半角/全角スペースかどうか」

をそれぞれ判定するメソッドです。

空白文字のみかどうかは上記2つを組み合わせることで判定できます。

使い方

csharp

1//姓と名のスペースの判定 2if (sei.IsWhiteSpaceOnly()) 3{ 4 // 空白文字のみの時に行いたい処理 5} 6else 7{ 8 string Sei = sei.Replace(" ", string.Empty).Replace(" ", string.Empty); 9 // 前述の拡張メソッドを使用するならこう 10 // string Sei = sei.RemoveWhiteSpace(); 11}

質問者さんはReplaceメソッドを勘違いされてると思うのですが、
Replaceメソッドは、「第一引数の文字を、第二引数の文字に置換する」処理です。
sei.Replace(" ", " ");だと、半角スペースを全角スペースに置換することになります。

投稿2019/01/16 02:27

編集2019/01/16 03:28
runny_nose

総合スコア280

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maam

2019/01/16 03:00

ご回答ありがとうございます! Replaceの使い方まちがっていましたね… public static class StringExtensions { public static bool IsWhiteSpaceOnly(this string str) { return !str.IsNullOrEmpty() && str.IsNullOrWhiteSpace(); } }は Formを表示するときに宣言するのですか? 例えば namespace 情報画面 { public partial class Form3 : Form { public Form3() { だったら、どこへ配置するのでしょう
runny_nose

2019/01/16 03:30 編集

Formの.cs内に書くのではなく、 参照できる場所に別のクラスとして新しく作るんです。 1. ソリューションエクスプローラで、追加したいディレクトリを右クリック 2. 「追加(D)」→「クラス(C)...」 3. 「StringExtensions.cs」と入力して確定 4. 作成された「StringExtensions.cs」内に記載 5. 使う側(Form)ではusingで参照する (using~) ※Formと同じnamespaceにするなら不要 namespaceは適宜決めてください
guest

0

最初に

string sei = textSei.Text.Trim();
string mei = textMei.Text.Trim();

という感じでTrim()関数を使えば、文字列の先頭および末尾にある空白(半角全角)を削除してくれます。

あとは空欄かどうか普通にチェックしてもらえば良いです。


ちょっと質問の期待されている事と違う事を書いてしまったので、加筆します。

与えられた文字列がスペースだけで構成されているかどうかは以下のようなコードで判定できます。

csharp

1 string aa = "  "; 2 3 if (aa.Trim() == "" && aa != "") 4 { 5 Debug.WriteLine("スペースのみは不可です"); 6 }

文字の先頭、末尾、途中関係なく全ての半角・全角スペースを除去するのであれば、以下のようなコードでOKです。

※papinianusさんの指摘を反映いたしました。

csharp

1 private void button1_Click(object sender, EventArgs e) 2 { 3 Debug.WriteLine(SuperTrim(" 鈴 木 ")); // →"鈴木" 4 } 5 6 // 関数名は好きに変えてください。 7 public static string SuperTrim(string s) 8 { 9 return string.Join("", s.Where(c => !char.IsWhiteSpace(c))); 10 }

投稿2019/01/16 02:03

編集2019/01/16 03:00
takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maam

2019/01/16 02:25

ご回答ありがとうございます。 先頭と末尾のスペースの削除はTrimということは分かったのですが スペースと文字がごっちゃになっているときはどうしたらよいのでしょう…
takabosoft

2019/01/16 02:26

あ、間のスペースも取っちゃう仕様ですか?「鈴 木」→「鈴木」としたい、と?
maam

2019/01/16 02:29

はい、そうです><
takabosoft

2019/01/16 02:32

解答欄に追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問