header

WinBinderで入力文字列を検査する

(1/3)

まず、入力したID(文字列)の長さと文字種をチェックするプログラムをつくってみる。ID の長さは 2文字以上 8文字以下、文字種は半角英数字のみとする。
以下のプログラムを input01.phpw という名前でセーブしてほしい。行番号は説明の便宜上付けているだけなので、保存するときに削除すること。

0001: <?php
0002: /** input01.phpw
0003:  * 入力されたユーザーIDを検査する
0004:  *
0005:  * @copyright (c)studio pahoo
0006:  * @author     パパぱふぅ
0007:  * @version     1.0  2006/02/20
0008: */
0009: include "./include/winbinder.php";        //WinBinder ライブラリをインクルード 
0010: mb_internal_encoding("Shift_JIS");      //内部コードは SHIFT-JISに統一
0011: 
0012: //通常のユーザー関数定義 =====================================================
0013: /**
0014:  * 入力値チェックの下請け
0015:  * @param string $str チェック対象文字列
0016:  * @param int $maxlength 最小桁数;0なら最小チェックは行わない
0017:  * @param int $maxlength 最大桁数;0なら長さチェックは行わない
0018:  * @param string $pattern 文字種パターン(正規表現)
0019:  * @return int 0=正常終了 / 1=最小桁数未満 / 2=最大桁数超 / 3=文字種違反
0020: */
0021: function check_sub($str$minlength$maxlength$pattern) {
0022:     $l = mb_strlen($str);
0023: 
0024:     //最小桁数チェック
0025:     if (($maxlength > 0) && ($l < $minlength))   return 1;
0026: 
0027:     //最大桁数チェック
0028:     if (($maxlength > 0) && ($l > $maxlength))   return 2;
0029: 
0030:     //文字種のチェック
0031:     for ($i = 0; $i < $l$i++) {
0032:         $c = mb_substr($str$i, 1);
0033:         $result = preg_match($pattern$c);
0034:         if ($result == 0) return 3;
0035:     }
0036: 
0037:     return 0;
0038: }
0039: 
0040: /**
0041:  * 入力値が半角英数字かどうか調べる
0042:  * @param string $str チェック対象文字列
0043:  * @param int $maxlength 最小桁数;0なら最小チェックは行わない
0044:  * @param int $maxlength 最大桁数;0なら長さチェックは行わない
0045:  * @return int 0=正常終了 / 1=最小桁数未満 / 2=最大桁数超 / 3=文字種違反
0046: */
0047: function check_alnum($str$minlength$maxlength) {
0048:     return check_sub($str$minlength$maxlength, "/[a-z|A-Z|0-9]/");
0049: }
0050: 
0051: /**
0052:  * 入力エラーチェックを行う
0053:  * @param string $str チェック対象文字列
0054:  * @return string 
0055: */
0056: function check_input($str) {
0057:     $r = check_alnum($str, 2, 8); //2文字以上8文字以下の半角英数字
0058: 
0059:     switch ($r) {
0060:         case 1:
0061:             $result = "IDは 2文字以上にしてください";
0062:             break;
0063:         case 2:
0064:             $result = "IDは 8文字以下にしてください";
0065:             break;
0066:         case 3:
0067:             $result = "IDは半角英数字のみです";
0068:             break;
0069:         default:
0070:             $result = "正しい IDです";
0071:             break;
0072:     }
0073:     return $result;
0074: }
0075: 
0076: // WinBinder 専用 ============================================================
0077: //イベントIDの定義
0078: if (!defined("IDCLOSE"))            define("IDCLOSE", 9);
0079: if (!defined("ID_ABOUT"))            define("ID_ABOUT", 1);
0080: if (!defined("IDC_EDIT_ID"))        define("IDC_EDIT_ID", 1001);
0081: if (!defined("IDC_BUTTON_EXEC"))    define("IDC_BUTTON_EXEC", 1002);
0082: if (!defined("IDC_LABEL_RESULT"))    define("IDC_LABEL_RESULT", 1003);
0083: 
0084: //メインウィンドウ生成
0085: $mainwin = wb_create_window(NULLAppWindow, "入力されたユーザーIDを検査する", WBC_CENTER, WBC_CENTER, 450, 180, 0, 0);
0086: 
0087: //イベントハンドラの設定
0088: wb_set_handler($mainwin, "process_main");
0089: 
0090: //コントロールの生成
0091: $edit_id = wb_create_control($mainwin, EditBox, "", 20, 20, 280, 24, IDC_EDIT_ID, WBC_VISIBLE | WBC_ENABLED, 0);
0092: wb_create_control($mainwin, PushButton, "検査", 320, 20, 80, 24, IDC_BUTTON_EXEC, WBC_VISIBLE | WBC_ENABLED, 0);
0093: $label_result = wb_create_control($mainwin, Label, "", 20, 80, 300, 24, IDC_LABEL_RESULT, WBC_VISIBLE | WBC_ENABLED, 0);
0094: 
0095: //メニューバーの生成
0096: $mainmenu = wb_create_control($mainwin, Menu, array(
0097:     "ファイル(&F)",
0098:         array(IDCLOSE,    "終了(&X)\tCtrl+Q", "", "", "Ctrl+Q"),
0099:     "ヘルプ(&H)",
0100:         array(ID_ABOUT,   "バージョン情報(&A)", "", "", "")
0101: )); 
0102: 
0103: /**
0104:  * イベントハンドラ
0105:  * @param obj $window メインウィンドウ
0106:  * @param int $id     イベントID
0107: */
0108: function process_main($window$id) { 
0109:     global $edit_id$label_result
0110: 
0111:     switch($id) {  
0112:         case IDC_BUTTON_EXEC:                //ボタンが押された
0113:             $str = wb_get_text($edit_id);
0114:             wb_set_text($label_result, check_input($str)); 
0115:             break
0116:         case ID_ABOUT:
0117:             wb_message_box($window, "バージョン 1.0", APPNAME, WBC_OK);
0118:             break;  
0119:         case IDCLOSE:
0120:             wb_destroy_window($window);      //ウィンドウを破棄 
0121:             break;  
0122:     }
0123: }
0124: 
0125: //アプリケーションループ
0126: wb_main_loop();
0127: ?>