まず、入力した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(NULL, AppWindow, "入力されたユーザー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: ?>
| 2006年02月28日更新 | ||
| <<前へ | <目次> | 次へ>> |
| 戻る | 【関連ページ】 | |