kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

TOOL更新_「AppCheckUtil」クラス

kaz PHP自動作成◎自動生成お助けTOOLで使用している「AppCheckUtil」クラスを公開します。
修正BSDライセンスです。お好きなようにいじって使ってください。
UTF-8用です。S-JISで使う場合”UTF-8”を"SJIS-WIN"に置換すれば大丈夫だと思います。)
使っている箇所の説明はhttp://kazpgm.ddo.jp/kaz01u/upload/doc/Admin_pgm_Doc.xlsの「4.検索条件入力チェック関数」を見てください。

  • 半角、全角チェック
  • カタカナチェック
  • ひらがなチェック
  • メールアドレスチェック
  • 数字チェック
  • 郵便番号チェック
  • 電話番号チェック
  • 日付チェック
  • 日付範囲チェック
  • 文字範囲チェック
  • コード値チェック
  • 日時チェック
  • アップロードファイルチェック

エラーメッセージは日本語、英語を選べます。

■使用例:corpA.phpから抜粋

// 会社名(フリガナ)
$result = AppCheckUtil::checkMoji($vars, $errorMessages, "会社名(フリガナ)",  $result, "corpkn", CON_CHK_FULL_KANA, 40, false, true,'0');
// 会社住所・郵便番号
$result = AppCheckUtil::checkMoji($vars, $errorMessages, "会社住所・郵便番号",  $result, "psno", CON_CHK_POST, 8, false, true,'0');
// 会社住所・都道府県
$result = AppCheckUtil::checkCodeValue($vars, $errorMessages, "会社住所・都道府県",  $result, "tdfknm", "CITY", true,'0');

■AppCheckUtil.php

<?php
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//_/
//_/ Copyright (c) 2009 kaz PHP自動作成お助けTOOL. All rights reserved.
//_/ ( http://kazpgm.ddo.jp/ )
//_/ 
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//
require_once('elements.php');

define('CON_CHK_ANY', 'ANY'); // 文字チェックなし
define('CON_CHK_HALF', 'HALF'); // 半角
define('CON_CHK_HALF_ANY', 'HALF_ANY'); // 半角文字チェックなし
define('CON_CHK_HALF_LETTER_DIGIT_KIGOU', 'HALF_LETTER_DIGIT_KIGOU'); // 半角英数字記号
define('CON_CHK_HALF_LETTER_DIGIT', 'HALF_LETTER_DIGIT'); // 半角英数字
define('CON_CHK_HALF_LETTER', 'HALF_LETTER'); // 半角英字
define('CON_CHK_HALF_LETTER_DIGIT_BIG', 'HALF_LETTER_DIGIT_BIG'); // 半角英数字大文字のみ
define('CON_CHK_HALF_LETTER_DIGIT_SMALL', 'HALF_LETTER_DIGIT_SMALL'); // 半角英数字小文字のみ
define('CON_CHK_HALF_LETTER_BIG', 'HALF_LETTER_BIG'); // 半角英字大文字のみ
define('CON_CHK_HALF_LETTER_SMALL', 'HALF_LETTER_SMALL'); // 半角英字小文字のみ
define('CON_CHK_HALF_KANA_DIGIT', 'HALF_KANA_DIGIT'); // 半角カタカナ数字
define('CON_CHK_HALF_DIGIT', 'HALF_DIGIT'); // 半角数字
define('CON_CHK_HALF_KANA', 'HALF_KANA'); // 半角カタカナ
define('CON_CHK_FULL', 'FULL'); // 全角
define('CON_CHK_FULL_KANA', 'FULL_KANA'); // 全角カタカナ
define('CON_CHK_FULL_HIRA', 'FULL_HIRA'); // 全角ひらがな
define('CON_CHK_EMAIL', 'EMAIL'); // メールアドレスの書式
define('CON_CHK_POST', 'POST'); // 郵便番号(nnn-nnnn)の書式
define('CON_CHK_TEL', 'TEL'); // 電話番号の書式

define('WIDTH_HALF', 256); // 全角・半角指定: 半角。
define('WIDTH_FULL', 512); // 全角・半角指定: 全角。
define('BIG', 1); // 大文字・小文字指定: 大文字。
define('SMALL', 2); // 大文字・小文字指定: 小文字。
    /*--------------------------------------------------------------------
     * 以下の文字種類定数は OR , AND 演算を行うため、
     * 2のX乗で定義する必要がある。 (TYPE_ANY は8ビットOnのため例外)。
     *--------------------------------------------------------------------*/
define('TYPE_NUM'    , 1); // 文字種類指定: 数字。
define('TYPE_ALPHA', 2); // 文字種類指定: 英字。
define('TYPE_KATAKANA'    , 4); // 文字種類指定:カタカナ。
define('TYPE_HIRAKANA'    , 8); // 文字種類指定:ひらがな。
define('TYPE_KIGOU'    , 16); // 文字種類指定:記号。
define('TYPE_SP'    , 32); // 文字種類指定:半角空白。
define('TYPE_KANA'    , TYPE_KATAKANA + TYPE_HIRAKANA); // 文字種類指定: かな。
define('TYPE_ANY'    , 255); // 文字種類指定: すべての文字。
define('ERROR'    , -1); // 例外定数: エラー。
define('UNKNOWN'    , 0); // 例外定数: 不明。 typeOf() の仕様により 0 以外への変更は不可
define('PATTERN'    , "/^[a-z0-9_\\-\\.\\+\\!\\#\\$\\%\\&\\'\\*\\/\\=\\?\\^\\`\\{\\|\\}\\~]+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,6}$/i"); // メールアドレス正規表現

class AppCheckUtil
{
  
    /**
     * 文字入力項目をチェックする。
     * <br>
     * @param  $vars       入力情報
     * @param  $errorMessages     エラー情報
     * @param  $typeNm      項目日本語名
     * @param  $result      エラーの有無情報
     * @param  $data        項目ID
     * @param  $chkKind     チェック種類<br>
     *                      <ul>
     *                        <li>ANY:文字チェックなし
     *                        <li>HALF:半角
     *                        <li>HALF_ANY:半角文字チェックなし
     *                        <li>HALF_LETTER_DIGIT_KIGOU:半角英数字記号
     *                        <li>HALF_LETTER_DIGIT:半角英数字
     *                        <li>HALF_LETTER:半角英字
     *                        <li>HALF_LETTER_DIGIT_BIG:半角英数字大文字のみ
     *                        <li>HALF_LETTER_DIGIT_SMALL:半角英数字小文字のみ
     *                        <li>HALF_LETTER_BIG:半角英字大文字のみ
     *                        <li>HALF_LETTER_SMALL:半角英字小文字のみ
     *                        <li>HALF_KANA_DIGIT:半角カタカナ数字
     *                        <li>HALF_DIGIT:半角数字
     *                        <li>HALF_KANA:半角カタカナ
     *                        <li>FULL:全角
     *                        <li>FULL_KANA:全角カタカナ
     *                        <li>FULL_HIRA:全角ひらがな
     *                        <li>EMAIL:メールアドレスの書式
     *                        <li>POST:郵便番号(nnn-nnnn)の書式
     *                        <li>TEL:電話番号の書式
     *                      </ul>
     * @param  $length      文字数
     * @param  $kotei     桁固定の場合はtrueを渡す。以外はfalseを渡す。
   * @param  $inputCheck  未入力時にチェックをしない場合はfalseを渡す。チェックをする場合はtrueを渡す。
     * @param  elementsIdx  0(日本語),1(英語)を指定する。
     * @param  trimflg      true(する),false(しない)を指定する。
     * @return boolean エラーの有無
      */
    function checkMoji(&$vars, &$errorMessages, $typeNm, $result,
                            $data, $chkKind, $length, $kotei, $inputCheck, $elementsIdx = '0', $trimflg = true) {    
        if ($trimflg == true) {
            $vars[$data] = trim($vars[$data]);
        }
        // 未入力をエラーとするかしないかの切り分け(未入力時は処理終了)
        if ('' == $vars[$data] ) {
            if ($inputCheck == true) { // 未入力をチェック
                // ?を入力してください。
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = '『' . $typeNm . '』を入力してください。';
                } else {
                    $errorMessages[$data] = 'Please input "' . $typeNm . '"';
                }
                return false;
            }
            return true;
        }
        $width = 0;
        $type  = 0;
        if (mb_substr($chkKind, 0, 4) == 'FULL') {
            $width = WIDTH_FULL;
        } else {
            $width = WIDTH_HALF;
        }

        if ($chkKind == CON_CHK_HALF) { // 半角
            $type = TYPE_NUM+TYPE_ALPHA+TYPE_KATAKANA+TYPE_KIGOU+TYPE_SP;
        }
        if ($chkKind == CON_CHK_HALF_LETTER_DIGIT_KIGOU) { // 半角英数字記号
            $type = TYPE_NUM+TYPE_ALPHA+TYPE_KIGOU+TYPE_SP;
        }
        if ($chkKind == CON_CHK_HALF_LETTER_DIGIT) { // 半角英数字
            $type = TYPE_NUM+TYPE_ALPHA;
        }
        if ($chkKind == CON_CHK_HALF_LETTER) { // 半角英字
            $type = TYPE_ALPHA;
        }
        if ($chkKind == CON_CHK_HALF_LETTER_DIGIT_BIG) { // 半角英数字大文字のみ
            $width += BIG;
            $type = TYPE_NUM+TYPE_ALPHA;
        }
        if ($chkKind == CON_CHK_HALF_LETTER_DIGIT_SMALL) { // 半角英数字小文字のみ
            $width += SMALL;
            $type = TYPE_NUM+TYPE_ALPHA;
        }
        if ($chkKind == CON_CHK_HALF_LETTER_BIG) { // 半角英字大文字のみ
            $width += BIG;
            $type = TYPE_ALPHA;
        }
        if ($chkKind == CON_CHK_HALF_LETTER_SMALL) { // 半角英字小文字のみ
            $width += SMALL;
            $type = TYPE_ALPHA;
        }
        if ($chkKind == CON_CHK_HALF_KANA_DIGIT) { // 半角カタカナ数字
            $type = TYPE_NUM+TYPE_KATAKANA+TYPE_SP;
        }
        if ($chkKind == CON_CHK_HALF_DIGIT) { // 半角数字
            $type = TYPE_NUM;
        }
        if ($chkKind == CON_CHK_HALF_KANA) { // 半角カタカナ
            $type = TYPE_KATAKANA+TYPE_SP;
        }
        if ($chkKind == CON_CHK_FULL) { // 全角
            $type = TYPE_ANY;
        }
        if ($chkKind == CON_CHK_FULL_KANA) { // 全角カタカナ
            $type = TYPE_KATAKANA;
        }
        if ($chkKind == CON_CHK_FULL_HIRA) { // 全角ひらがな
            $type = TYPE_HIRAKANA;
        }
        if ($chkKind == CON_CHK_EMAIL) { // メールアドレスの書式
            if (!preg_match(PATTERN, (string)$vars[$data]) ) {
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = 'メールアドレスの形式が正しくありません。';    
                } else {
                    $errorMessages[$data] = 'Email is not correct.';    
                }
                return false;
            }
        } else if ($chkKind == CON_CHK_POST) { // 郵便番号(nnn-nnnn)の書式
            if (!preg_match('/^[0-9][0-9][0-9]\-[0-9][0-9][0-9][0-9]$/i', (string)$vars[$data]) ) {
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = '郵便番号(nnn-nnnn)の形式が正しくありません。';    
                } else {
                    $errorMessages[$data] = 'ZIP code (nnn-nnnn) is not correct.';    
                }
                return false;
            }
        } else if ($chkKind == CON_CHK_TEL) { // 電話番号の書式
            //if (!preg_match("/\d{2,4}-\d{2,4}-\d{4}/", (string)$vars[$data]) ) {
            if (!preg_match("/^[0-9\-]*$/", (string)$vars[$data]) ) {
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = '電話番号の形式が正しくありません。';    
                } else {
                    $errorMessages[$data] = 'the telephone number (numerical and hyphen) is not correct.';    
                }
                return false;
            }
        } else if ($chkKind == CON_CHK_HALF_ANY) { // 半角文字チェックなし
            if (!AppCheckUtil::typeOf($vars[$data], WIDTH_HALF, TYPE_ANY)) {
                // 文字種が違っています。
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = '『' . $typeNm . '』の文字種が違っています。';
                } else {
                    $errorMessages[$data] = 'The character kind is different. "' . $typeNm . '"';
                }
                return false;
            }
        } else if ($chkKind != CON_CHK_ANY  && !AppCheckUtil::typeOf($vars[$data], $width, $type)) {
            // 文字種が違っています。
            if ($elementsIdx == '0') {
                $errorMessages[$data] = '『' . $typeNm . '』の文字種が違っています。';
            } else {
                $errorMessages[$data] = 'The character kind is different. "' . $typeNm . '"';
            }
            return false;
        }

        if (mb_strlen($vars[$data], 'UTF-8') >  $length ) {
            if ($kotei == false) {
                // 文字数は?以内で入力してください。
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = '『' . $typeNm . '』の文字数は' . $length . '以内で入力してください。';
                } else {
                    $errorMessages[$data] = 'Please input it within ' . $length . ' characters. "' . $typeNm . '"';
                }
                return false;
            } else {
                // 文字数は?で入力してください。
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = '『' . $typeNm . '』の文字数は' . $length . 'で入力してください。';
                } else {
                    $errorMessages[$data] = 'Please input it by  ' . $length . ' characters. "' . $typeNm . '"』';
                }
                return false;
            }
        } else if (mb_strlen($vars[$data], 'UTF-8') !=  $length && $kotei == true) {
            // 文字数は?で入力してください。
            if ($elementsIdx == '0') {
                $errorMessages[$data] = '『' . $typeNm . '』の文字数は' . $length . 'で入力してください。';
            } else {
                $errorMessages[$data] = 'Please input it by  ' . $length . ' characters. "' . $typeNm . '"';
            }
            return false;
        }
        return true;
    }


    function checkDate(&$vars, &$errorMessages, $typeNm, $result,
                            $data, $inputCheck, $elementsIdx = '0') {    
        // 未入力をエラーとするかしないかの切り分け(未入力時は処理終了)
        if ('' == $vars[$data] ) {
            if ($inputCheck == true) { // 未入力をチェック
                // ?を入力してください。
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = '『' . $typeNm . '』を入力してください。';
                } else {
                    $errorMessages[$data] = 'Please input "' . $typeNm . '"';
                }
                return false;
            }
            return true;
        }

        $ary = explode('/', $vars[$data], 3);
        $temp = array();
        $temp[$data] =  $ary[0] .  $ary[1].  $ary[2];
        if ($ary[0] == '' ||  $ary[1] == '' || $ary[2] == '' || mb_strlen($ary[0]) != 4 || 
                !AppCheckUtil::checkMoji($temp, $errorMessages, $typeNm, $result,
                        $data, CON_CHK_HALF_DIGIT, 10, false, false, $elementsIdx)) {
            // 日付を入力してください。
            if ($elementsIdx == '0') {
                $errorMessages[$data] = '『' . $typeNm . '』は日付を入力してください。';
            } else {
                $errorMessages[$data] = 'Please input Date Format "' . $typeNm . '"';
            }
            return false;
        }
        if (!checkdate($ary[1], $ary[2], $ary[0])) { 
            // 日付を入力してください。
            if ($elementsIdx == '0') {
                $errorMessages[$data] = '『' . $typeNm . '』は日付を入力してください。';
            } else {
                $errorMessages[$data] = 'Please input Date Format "' . $typeNm . '"';
            }
            return false;
        }


        if (''!= $vars[$data]) {
            $vars[$data] = sprintf("%04d", $ary[0]) . 
                                        '/' . sprintf("%02d", $ary[1]) . 
                                        '/' . sprintf("%02d", $ary[2]);
        }
        return true;
    }

    function checkDateFromTo(&$vars, &$errorMessages, $typeNm, $result,
                            $dataFrom, $dataTo, $elementsIdx = '0') {    

        $dateNm = mb_substr($dataFrom,0, mb_strlen($dataFrom) - 5);
        if ('' != $vars[$dataFrom] ) {

            $ary = explode('/', $vars[$dataFrom], 3);
            $temp = array();
            $temp[$dataFrom] =  $ary[0] .  $ary[1].  $ary[2];
            if ($ary[0] == '' ||  $ary[1] == '' || $ary[2] == '' || mb_strlen($ary[0]) != 4 || 
                    !AppCheckUtil::checkMoji($temp, $errorMessages, $typeNm, $result,
                            $dataFrom, CON_CHK_HALF_DIGIT, 10, false, false, $elementsIdx)) {
                // 日付を入力してください。
                if ($elementsIdx == '0') {
                    $errorMessages[$dateNm] = '『' . $typeNm . ' From』は日付を入力してください。';
                } else {
                    $errorMessages[$dateNm] = 'Please input Date Format "' . $typeNm . ' From"';
                }
                return false;
            }
            if (!checkdate($ary[1], $ary[2], $ary[0])) { 
                // 日付を入力してください。
                if ($elementsIdx == '0') {
                    $errorMessages[$dateNm] = '『' . $typeNm . ' From』は日付を入力してください。';
                } else {
                    $errorMessages[$dateNm] = 'Please input Date Format "' . $typeNm . ' From"';
                }
                return false;
            }
        }

        if ('' != $vars[$dataTo] ) {
            $ary = explode('/', $vars[$dataTo], 3);
            $temp = array();
            $temp[$dataTo] =  $ary[0] .  $ary[1].  $ary[2];
            if ($ary[0] == '' ||  $ary[1] == '' || $ary[2] == '' || mb_strlen($ary[0]) != 4 || 
                    !AppCheckUtil::checkMoji($temp, $errorMessages, $typeNm, $result,
                            $dataTo, CON_CHK_HALF_DIGIT, 10, false, false, $elementsIdx)) {
                // 日付を入力してください。
                if ($elementsIdx == '0') {
                    $errorMessages[$dateNm] = '『' . $typeNm . ' To』は日付を入力してください。';
                } else {
                    $errorMessages[$dateNm] = 'Please input Date Format "' . $typeNm . ' To"';
                }
                return false;
            }
            if (!checkdate($ary[1], $ary[2], $ary[0])) { 
                // 日付を入力してください。    
                if ($elementsIdx == '0') {
                    $errorMessages[$dateNm] = '『' . $typeNm . ' To』は日付を入力してください。';
                } else {
                    $errorMessages[$dateNm] = 'Please input Date Format "' . $typeNm . ' To"';
                }
                return false;
            }
        }

        if (''!= $vars[$dataFrom]) {
            $ary = explode('/', $vars[$dataFrom], 3);
            $vars[$dataFrom] = sprintf("%04d", $ary[0]) . 
                                        '/' . sprintf("%02d", $ary[1]) . 
                                        '/' . sprintf("%02d", $ary[2]);
        }

        if (''!= $vars[$dataTo]) {
            $ary = explode('/', $vars[$dataTo], 3);
            $vars[$dataTo] = sprintf("%04d", $ary[0]) . 
                                        '/' . sprintf("%02d", $ary[1]) . 
                                        '/' . sprintf("%02d", $ary[2]);
        }

        if (''!= $vars[$dataFrom] && ''!= $vars[$dataTo] && $vars[$dataFrom] > $vars[$dataTo]) {
            // 日付From <= 日付Toで入力してください。
            if ($elementsIdx == '0') {
                $errorMessages[$dateNm] = '『' . $typeNm . '』は日付From <= 日付Toで入力してください。';
            } else {
                $errorMessages[$dateNm] = 'Please input FromDate <= ToDate"' . $typeNm . '"';
            }
            return false;
        }
        
        return true;
    }

    function checkStringCompareTo(&$vars, &$errorMessages, $typeNm, $result,
                            $dataFrom, $dataTo, $elementsIdx = '0') {    

        if (''!= $vars[$dataFrom] && ''!= $vars[$dataTo] && $vars[$dataFrom] > $vars[$dataTo]) {
            // From <= Toで入力してください。
            if ($elementsIdx == '0') {
                $errorMessages[$dataFrom] = '『' . $typeNm . '』はFrom <= Toで入力してください。';
            } else {
                $errorMessages[$dataFrom] = 'Please input From <= To "' . $typeNm . '"';
            }
            return false;
        }
        
        return true;
    }

    function checkCodeValue(&$vars, &$errorMessages, $typeNm, $result,
                            $data, $codeName, $inputCheck, $elementsIdx = '0') {
        global $ELEMENTS;

        // 配列は検索のチェックボックスでしか使わないのでチェックしない。
        if (!empty($vars[$data]) && is_array($vars[$data])) { 
            return $result;
        }

        // 未入力をエラーとするかしないかの切り分け(未入力時は処理終了)
        if ('' == $vars[$data] ) {
            if ($inputCheck == true) { // 未入力をチェック
                // ?を入力してください。
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = '『' . $typeNm . '』を入力してください。';
                } else {
                    $errorMessages[$data] = 'Please input "' . $typeNm . '"';
                }
                return false;
            }
            return true;
        }

        if (isset($ELEMENTS[$codeName][$vars[$data]])) {
            return $result;
        }
        // コード値がない場合
        if ($elementsIdx == '0') {
            $errorMessages[$data] = '『' . $typeNm . '』の入力形式に誤りがあります。';
        } else {
            $errorMessages[$data] = 'The mistake is found in the input form of the "' . $typeNm . '".';
        }
        return false;
    }

    function checkCommaNumeric(&$vars, &$errorMessages, $typeNm, $result,
                            $data, $min, $max, $inputCheck, $elementsIdx = '0') {    
        // 未使用(未作成)
        return true;
    }

    function checkDotNumeric(&$vars, &$errorMessages, $typeNm, $result,
                            $data, $min, $max, $up, $down, $inputCheck, $elementsIdx = '0') {    
        // 未使用(未作成)
        return true;
    }


    /**
     * 指定された文字列が、引数で指定した文字種と一致するかを検査する。<br>
     * <pre>
     *   全角・半角の指定は以下の定数で指定する。
     *    半角:WIDTH_HALF
     *    全角:WIDTH_FULL
     *  
     *   文字列種別の指定は以下の定数で指定する。
     *    数字    :TYPE_NUM
     *    英字    :TYPE_ALPHA
     *    カタカナ  :TYPE_KATAKANA
     *    ひらがな  :TYPE_HIRAKANA
     *    かな    :TYPE_KANA
     *    すべての文字:TYPE_ANY
     * </pre>
     * 
     * 文字列種別は種別の組み合わせで指定ができる。<br>
     * 例えば、数字または英字であれば一致とみなす場合、以下のように定数の加算で指定する。<br>
     * <br>
     *   type_NUM + type_ALPHA<br>
     *
     * @param    $targetString    検査する文字列
     * @param    $width            全角・半角の指定
     * @param    $type            文字列種別の指定
     * @return                    検査結果
     */
    function typeOf($targetString, $width, $type) {

        // 文字列長チェック
        if(mb_strwidth($targetString) == 0){
            return false;
        }
        $bigSmall = 0; // 大文字小文字無し
        if ($width != WIDTH_FULL && $width != WIDTH_HALF) {
            if ($width > WIDTH_FULL) {
                $bigSmall = $width - WIDTH_FULL;
                $width = WIDTH_FULL;
            } else if ($width > WIDTH_HALF) {
                $bigSmall = $width - WIDTH_HALF;
                $width = WIDTH_HALF;
            }
        }

        // 文字幅(全角・半角)を検査
//        if(AppCheckUtil::getStringwidth($targetString) != $width ){
        if(AppCheckUtil::getStringwidth(preg_replace("/\r\n|\n/", "", $targetString)) != $width ){
            return false;
        }
        
        // 文字種を検査
        if( $type == TYPE_ANY ){
            // 文字種が何でもよければ true でリターン
            return true;
        }
        
        // 文字列長分繰り返し
        for($i = 0; $i < mb_strlen($targetString, "UTF-8"); $i++){

            // 各文字の文字種を取得
            $moji = mb_substr($targetString, $i, 1, "UTF-8");
            $chartype = AppCheckUtil::getChartype(mb_substr($targetString, $i, 1, "UTF-8"));

            
            // 文字種判定
            
            if( ($chartype & $type) == 0 ){
                return false;
            }
            if (WIDTH_HALF == $width) { // 半角のみ大文字小文字のチェックを行う。
                if (BIG == $bigSmall) { // 大文字
                    if('a' <= $moji && $moji <= 'z'){
                        return false;
                    }
                } else if (SMALL == $bigSmall) { // 小文字
                    if('A' <= $moji && $moji <= 'Z'){
                        return false;
                    }
                }
            }

        }
        
        return true;
    }


    /**
     * 指定された文字の文字種を取得する。<br>
     * <pre>
     * 返却される値は以下の定数値
     *  
     *   数字    :TYPE_NUM
     *   英字    :TYPE_ALPHA
     *   カタカナ  :TYPE_KATAKANA
     *   ひらがな  :TYPE_HIRAKANA
     *   かな    :TYPE_KANA
     *   半角空白  :TYPE_SP
     *   全角空白  :TYPE_ZENSP
     *   不明:UNKNOWN
     * </pre>
     * 
     * @param    $target    検査する文字
     * @return            文字種を表す定数
     */
    function getCharType($target){

        if        ('A'      <= $target && $target <= 'Z'     ){        return TYPE_ALPHA;    // 半角英字大文字
        }else if('a'      <= $target && $target <= 'z'     ){        return TYPE_ALPHA;    // 半角英字小文字
        }else if('0'      <= $target && $target <= '9'     ){        return TYPE_NUM;        // 半角数字
        }else if('ヲ' <= $target && $target <= '゚'){        return TYPE_KATAKANA;// その他半角(カタカナ)
        }else if('A'     <= $target && $target <= 'Z'    ){        return TYPE_ALPHA;    // 全角英字大文字
        }else if('a'     <= $target && $target <= 'z'    ){        return TYPE_ALPHA;    // 全角英字小文字
        }else if('0'     <= $target && $target <= '9'    ){        return TYPE_NUM;        // 全角数字
        }else if(' ' == $target){                            return TYPE_KANA;    // かな(カタカナ+ひらがな)
        }else if('ー' == $target){                            return TYPE_KANA;    // かな(カタカナ+ひらがな)
        }else if('あ' <= $target && $target <= 'ん'){        return TYPE_HIRAKANA;// 日本語ひらがな
        }else if('ァ' <= $target && $target <= 'ヶ'){     return TYPE_KATAKANA;// 日本語カタカナ
        }else if(' ' == $target){                            return TYPE_SP;// 半角空白
        }else if('!'      <= $target && $target <= '/'){     return TYPE_KIGOU;// 半角記号
        }else if(':'      <= $target && $target <= '@'){     return TYPE_KIGOU;// 半角記号
        }else if('['      <= $target && $target <= '`'){     return TYPE_KIGOU;// 半角記号
        }else if('{'      <= $target && $target <= '~'){     return TYPE_KIGOU;// 半角記号
        }else{                                                    return UNKNOWN;        // 不明
        }
    }


    /**
     * 指定された文字列が全角または半角のどちらで構成されているかを判断する。<br>
     * <pre>
     * 返却される値は以下の定数値
     *  
     *   半角 :WIDTH_HALF
     *   全角 :WIDTH_FULL
     *   不明 :UNKNOWN
     *   エラー:ERROR(指定文字列がnullや""の場合)
     * </pre>
     *
     * @param    $targetString    検査する文字列
     * @return                    全角、半角を表す定数
     */
    function getStringWidth($targetString){

        // 引数チェック
        if(mb_strwidth($targetString) == 0){
            return ERROR;
        }
        
        $byteLen = strlen(mb_convert_encoding($targetString,"SJIS-WIN","UTF-8"));
        $mojiLen = mb_strlen(mb_convert_encoding($targetString,"SJIS-WIN","UTF-8"), 'SJIS-WIN');
        
        if($byteLen == $mojiLen){                // 半角

            return WIDTH_HALF;

        }else if( ($mojiLen*2) == $byteLen ){    // 全角

            return WIDTH_FULL;

        }else{                                // それ以外は不明

            return UNKNOWN;
        }
    }

    function checkPhoto(&$errorMessages, $typeNm, $result,
                            $data, $inputCheck, $elementsIdx = '0', $exts = array( "jpg", "jpeg", "gif", "png" )) {    
        // 未入力をエラーとするかしないかの切り分け(未入力時は処理終了)
        if (empty($_FILES[$data]['name'])) {
            if ($inputCheck == true ) { // 未入力をチェック
                if ($_REQUEST['old_' . $data] == '') {
                    // ?を入力してください。
                    if ($elementsIdx == '0') {
                        $errorMessages[$data] = '『' . $typeNm . '』を入力してください。';
                    } else {
                        $errorMessages[$data] = 'Please input "' . $typeNm . '"';
                    }
                    return false;
                } else {
                    return $result;
                }
            }
            return $result;
        }
        chkExtension( $_FILES[$data]['name'], $exts, $errorMessages[$data] );
        if (''!= $errorMessages[$data]) {
            return false;
        }
        return $result;
    }


    function checkDateTime(&$vars, &$errorMessages, $typeNm, $result,
                            $data, $inputCheck, $elementsIdx = '0') {    
        $vars[$data] = trim($vars[$data]);
        // 未入力をエラーとするかしないかの切り分け(未入力時は処理終了)
        if ('' == $vars[$data] ) {
            if ($inputCheck == true) { // 未入力をチェック
                // ?を入力してください。
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = '『' . $typeNm . '』を入力してください。';
                } else {
                    $errorMessages[$data] = 'Please input "' . $typeNm . '"';
                }
                return false;
            }
            $vars[$data] = '0000/00/00 00:00:00';
            return true;
        } else if ('0000/00/00 00:00:00' == $vars[$data] ) {
            return true;
        }

        $aryA = explode(' ', $vars[$data], 2);
        if ($aryA[0] == '' ||  $aryA[1] == '' || mb_strlen($aryA[0]) != 10 || 
                                                        mb_strlen($aryA[1]) != 8) {
            // 日付時間を入力してください。
            if ($elementsIdx == '0') {
                $errorMessages[$data] = '『' . $typeNm . '』は日付時間を入力してください。';
            } else {
                $errorMessages[$data] = 'Please input DateTime Format "' . $typeNm . '"';
            }
            return false;
        }
        // 日付をチェック
        $ary = explode('/', $aryA[0], 3);
        $temp = array();
        $temp[$data] =  $ary[0] .  $ary[1].  $ary[2];
        if ($ary[0] == '' ||  $ary[1] == '' || $ary[2] == '' || mb_strlen($ary[0]) != 4 || 
                !AppCheckUtil::checkMoji($temp, $errorMessages, $typeNm, $result,
                        $data, CON_CHK_HALF_DIGIT, 10, false, false, $elementsIdx)) {
            // 日付時間を入力してください。
            if ($elementsIdx == '0') {
                $errorMessages[$data] = '『' . $typeNm . '』は日付時間を入力してください。';
            } else {
                $errorMessages[$data] = 'Please input Date Format "' . $typeNm . '"';
            }
            return false;
        }
        if (!checkdate($ary[1], $ary[2], $ary[0])) { 
            // 日付時間を入力してください。
            if ($elementsIdx == '0') {
                $errorMessages[$data] = '『' . $typeNm . '』は日付時間を入力してください。';
            } else {
                $errorMessages[$data] = 'Please input Date Format "' . $typeNm . '"';
            }
            return false;
        }
        // 時間をチェック
        $aryB = explode(':', $aryA[1], 3);
        $temp = array();
        $temp[$data] =  $aryB[0] .  $aryB[1].  $aryB[2];
        if ($aryB[0] == '' ||  $aryB[1] == '' || $aryB[2] == '' || mb_strlen($aryB[0]) != 2 || 
            mb_strlen($aryB[1]) != 2 || mb_strlen($aryB[2]) != 2 || 
                !AppCheckUtil::checkMoji($temp, $errorMessages, $typeNm, $result,
                        $data, CON_CHK_HALF_DIGIT, 10, false, false, $elementsIdx) ) {
            // 日付時間を入力してください。
            if ($elementsIdx == '0') {
                $errorMessages[$data] = '『' . $typeNm . '』は日付時間を入力してください。';
            } else {
                $errorMessages[$data] = 'Please input Date Format "' . $typeNm . '"';
            }
            return false;
        }


        if (''!= $vars[$data]) {
            $vars[$data] = sprintf("%04d", $ary[0]) . 
                                        '/' . sprintf("%02d", $ary[1]) . 
                                        '/' . sprintf("%02d", $ary[2]) .
                                        ' ' . sprintf("%02d", $aryB[0]) .
                                        ':' . sprintf("%02d", $aryB[1]) . 
                                        ':' . sprintf("%02d", $aryB[2]);
        }
        return true;
    }

}
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//_/ Copyright (c) 2009 kaz PHP自動作成◎自動生成お助けTOOL. All rights reserved.
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

?>

elements.phpをrequire_onceしているのでサンプル載せます。

■elements.php
<?php /* プルダウン・チェックボックス等で使用する要素の定義 */
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//_/
//_/ Copyright (c) 2009 kaz PHP自動作成お助けTOOL. All rights reserved.
//_/ ( http://kazpgm.ddo.jp/ )
//_/
//_/ 各自の環境にあわせて自由に変更してもよいです。
//_/ 
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//

$ELEMENTS = array(
    // ログイン権限
    'LOGIN_TYPE' => array(
        '1'  => array('Super管理者','SuperAdmin'),
        '2'  => array('管理者','Admin'),
    ),
    // 有効フラグ
    'YUKO_FLG' => array(
        '1'  => array('無効','Invalid'),
        '2'  => array('有効','Effect'),
    ),
    // 有効/無効データ
    'DELDT_FLG' => array(
        '1'  => array('無効のみ',''),
        '2'  => array('有効のみ',''),
    ),
    // 公開区分
    'OPN_KBN' => array(
        '1'  => array('公開','open'),
        '2'  => array('非公開','closed'),
    ),
    // 都道府県
    'CITY' => array(
        '1'  => array('北海道',''),
        '2'  => array('青森県',''),
        '3'  => array('岩手県',''),
        '46'  => array('鹿児島県',''),
        '47'  => array('沖縄県',''),
    ),

    // ソート順
    'sort_order' => array(
        'ASC'  => array('昇順','ASC'),
        'DESC' => array('降順','DESC')
    ),

);


// 「年」のプルダウン
$ELEMENTS['years'] = array();
foreach(range(2007, date('Y')+1) as $y) {
    $ELEMENTS['years'][$y] = array($y, $y);
}

// 「月」のプルダウン
$ELEMENTS['months'] = array();
foreach(range(1, 12) as $m) {
    $ELEMENTS['months'][$m] = array(sprintf('%02d', $m), sprintf('%02d', $m));
}

// 「日」のプルダウン
$ELEMENTS['days'] = array();
foreach(range(1, 31) as $d) {
    $ELEMENTS['days'][$d] = array(sprintf('%02d', $d), sprintf('%02d', $d));
}

?>
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//_/ Copyright (c) 2009 kaz PHP自動作成◎自動生成お助けTOOL. All rights reserved.
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/


■サイト:http://kazpgm.ddo.jp/

02:00-03:00