SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

C#の入力チェック実例サンプルコード

全角チェックや数値チェックなどの基本的な実装方法


ダウンロード 実行ファイル (11.5 KB)
ダウンロード ソースコード (21.7 KB)

ペーストを受け付けないテキストボックス

 キー入力以外でテキストボックスに値を入力する方法にペーストがあります。ペーストを無効にするためにWndProcメソッドをオーバーライドし、WindowsメッセージのメッセージIDを判定します。メッセージIDにより、イベントをキャンセルしてペーストを実行させないようにします。

 最初にペーストのメッセージIDを定数宣言します。ペーストのメッセージIDは16進数で「302」なので、次のようになります。

private const int WM_PASTE = 0x302;

 キー入力チェック時と同様にWndProcのオーバーライドを追加します。

protected override void WndProc(ref Message m)
{
    base.WndProc (ref m);
}

 ペーストされた場合は、以降の処理を実施しないので、次のプログラムを追加します。

if ( m.Msg == WM_PASTE )
{
    return;
}

 以下が実装した結果です。

実装結果
/// <summary>
/// WndProcのオーバーライド
/// Windows メッセージを処理します
/// </summary>
/// <param name="m"></param>
protected override void WndProc(ref Message m)
{
    if ( m.Msg == WM_PASTE )
    {
        return;
    }
    base.WndProc (ref m);
}

入力された文字種別をチェックする

 テキストボックスに入力された文字が「ひらがなのみ」かどうか、「全角カタカナのみ」かどうかなど、入力チェックを行いたい種類はたくさんあると思います。ここでは以下の8パターンについての入力チェックを行います。

  • 全角のみ
  • 数値のみ
  • 全角カタカナのみ
  • 半角カタカナのみ
  • ひらがなのみ
  • 郵便番号のみ
  • 実数のみ(Decimal)
  • 電話番号のみ

 なお、入力チェックの種別を設定できるように、入力チェック種別の列挙型を作成しておくと便利です。

public enum InputCheckedKind : uint
{
    /// <summary>入力チェックなし</summary>
    None             = 0x0000,
    /// <summary>全角のみ許可する</summary>
    FullSize         = 0x0001,
    /// <summary>数値のみ許可する</summary>
    Numeric          = 0x0002,
    /// <summary>全角カタカナのみ許可する</summary>
    FullSizeKatakana = 0x0003,
    /// <summary>半角カタカナのみ許可する</summary>
    HalfSizeKatakana = 0x0004,
    /// <summary>ひらがなのみ許可する</summary>
    Hiragana         = 0x0005,
    /// <summary>郵便番号のみ許可する</summary>
    ZipCode          = 0x0006,
    /// <summary>実数のみ許可する</summary>
    Decimal          = 0x0007,
    /// <summary>電話番号のみ許可する</summary>
    Tel              = 0x0008,
}

整合性のチェックについて

 入力値のチェックについては、正規表現を用いてパターンにマッチしているかどうかで判定を行います。正規表現を用いるには、System.Text.RegularExpressions.Regexクラスを用います。

「全角文字列のみ」のチェック

 全角文字列のみの入力を許可する場合、入力された文字列がすべて2バイト文字かどうかをチェックします。これは、以下のようにして入力文字数と入力バイト数を取得し、「入力文字数×2が入力バイト数と等しいか」をチェックすることで判断します。

// 入力文字数を取得します
int textLength = this.Text.Replace("\r\n", "").Length;
// 入力バイト数を取得します
int textByte
 = Encoding.GetEncoding("Shift_JIS").GetByteCount(
                                       this.Text.Replace("\r\n", ""));

チェック一覧

 それ以外のチェックは、正規表現にマッチしているかどうかだけで判断することができます。以下に一般的なチェック内容と使用する正規表現をまとめました。

入力チェックと使用する正規表現
チェック内容正規表現
数値のチェック^[0-9]+$
全角カタカナのチェック^[ァ-ヴ!ー]+$
半角カタカナのチェック^[ア-゙]+$
全角ひらがなのチェック^[ぁ-ん!ー]+$
郵便番号のチェック^[0-9]{3}[-][0-9]{4}$
電話番号のチェック^[0-9]{2,5}-[0-9]{1,4}-[0-9]{4}$

 実際に入力チェックを行うメソッドは、次のようにして実装します。

使い方(ソースは数値チェックの場合)
public bool InputCheck(out string errorMessage)
{
    // エラーメッセージ
    errorMessage = string.Empty;
    bool result = false;

    Regex regex = new Regex("^[0-9]+$");
    if ( !regex.IsMatch( this.Text ))
    {
        errorMessage = "数値のみ入力してください";
    }
    else
    {
        result = true;
    }
    return result;
}

プロパティの追加

小数点以下の桁数を設定するプロパティ

 実数の場合、小数点以下の桁数を制限する必要が出てくると思います。そこで、最大値・最小値を設定したときと同様、小数点以下の桁数を設定するプロパティを追加します。

小数点以下の桁数を持つプロパティ
public int DecimalPlace
{
    get
    {
        return this.decimalPlace;
    }
    set
    {
        this.decimalPlace = value;
    }
}

次のページ
通貨型の入力チェック

修正履歴

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

高山 昌悟(タカヤマ ショウゴ)

今までは主に、Windowsアプリケーションの開発を行ってきました。最近はWebアプリケーションの開発を行っています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1083 2007/04/16 17:26

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー