kazpgmの日記

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

TOOL更新_AppCheckUtil.php(チェッククラス)

TOOL更新_これからAppCheckUtil.php(チェッククラス)。まだ実験中なのでコーディング規約には沿っていないけど、徐々に、このページを直接直していくことにする。

<?php
//  =============================================================
//  2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) Start
//  修正BSDライセンス。
//  =============================================================
require_once('AppElements.php');

class AppCheckUtil
{

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

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

    /**
     * 文字入力項目をチェックする。
     * <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 = AppCheckUtil::WIDTH_FULL;
        } else {
            $width = AppCheckUtil::WIDTH_HALF;
        }

        if ($chkKind == AppCheckUtil::CON_CHK_HALF) { // 半角
            $type = AppCheckUtil::TYPE_NUM+AppCheckUtil::TYPE_ALPHA+AppCheckUtil::TYPE_KATAKANA+AppCheckUtil::TYPE_KIGOU+AppCheckUtil::TYPE_SP;
        }
        if ($chkKind == AppCheckUtil::CON_CHK_HALF_LETTER_DIGIT_KIGOU) { // 半角英数字記号
            $type = AppCheckUtil::TYPE_NUM+AppCheckUtil::TYPE_ALPHA+AppCheckUtil::TYPE_KIGOU+AppCheckUtil::TYPE_SP;
        }
        if ($chkKind == AppCheckUtil::CON_CHK_HALF_LETTER_DIGIT) { // 半角英数字
            $type = AppCheckUtil::TYPE_NUM+AppCheckUtil::TYPE_ALPHA;
        }
        if ($chkKind == AppCheckUtil::CON_CHK_HALF_LETTER) { // 半角英字
            $type = AppCheckUtil::TYPE_ALPHA;
        }
        if ($chkKind == AppCheckUtil::CON_CHK_HALF_LETTER_DIGIT_BIG) { // 半角英数字大文字のみ
            $width += AppCheckUtil::BIG;
            $type = AppCheckUtil::TYPE_NUM+AppCheckUtil::TYPE_ALPHA;
        }
        if ($chkKind == AppCheckUtil::CON_CHK_HALF_LETTER_DIGIT_SMALL) { // 半角英数字小文字のみ
            $width += AppCheckUtil::SMALL;
            $type = AppCheckUtil::TYPE_NUM+AppCheckUtil::TYPE_ALPHA;
        }
        if ($chkKind == AppCheckUtil::CON_CHK_HALF_LETTER_BIG) { // 半角英字大文字のみ
            $width += AppCheckUtil::BIG;
            $type = AppCheckUtil::TYPE_ALPHA;
        }
        if ($chkKind == AppCheckUtil::CON_CHK_HALF_LETTER_SMALL) { // 半角英字小文字のみ
            $width += AppCheckUtil::SMALL;
            $type = AppCheckUtil::TYPE_ALPHA;
        }
        if ($chkKind == AppCheckUtil::CON_CHK_HALF_KANA_DIGIT) { // 半角カタカナ数字
            $type = AppCheckUtil::TYPE_NUM+AppCheckUtil::TYPE_KATAKANA+AppCheckUtil::TYPE_SP;
        }
        if ($chkKind == AppCheckUtil::CON_CHK_HALF_DIGIT) { // 半角数字
            $type = AppCheckUtil::TYPE_NUM;
        }
        if ($chkKind == AppCheckUtil::CON_CHK_HALF_KANA) { // 半角カタカナ
            $type = AppCheckUtil::TYPE_KATAKANA+AppCheckUtil::TYPE_SP;
        }
        if ($chkKind == AppCheckUtil::CON_CHK_FULL) { // 全角
            $type = AppCheckUtil::TYPE_ANY;
        }
        if ($chkKind == AppCheckUtil::CON_CHK_FULL_KANA) { // 全角カタカナ
            $type = AppCheckUtil::TYPE_KATAKANA;
        }
        if ($chkKind == AppCheckUtil::CON_CHK_FULL_HIRA) { // 全角ひらがな
            $type = AppCheckUtil::TYPE_HIRAKANA;
        }
        if ($chkKind == AppCheckUtil::CON_CHK_EMAIL) { // メールアドレスの書式
            if (!preg_match(AppCheckUtil::PATTERN, (string)$vars[$data]) ) {
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = 'メールアドレスの形式が正しくありません。';    
                } else {
                    $errorMessages[$data] = 'Email is not correct.';    
                }
                return false;
            }
        } else if ($chkKind == AppCheckUtil::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 == AppCheckUtil::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 == AppCheckUtil::CON_CHK_HALF_NUMBER) { // 半角数値(マイナスも入る)の書式
            if (!preg_match('/^-?[0-9]+$/', (string)$vars[$data]) ) {
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = '『' . $typeNm . '』の文字種が違っています。';    
                } else {
                    $errorMessages[$data] = 'The character kind is different. "' . $typeNm . '"';
                }
                return false;
            }
        } else if ($chkKind == AppCheckUtil::CON_CHK_HALF_ANY) { // 半角文字チェックなし
            if (!AppCheckUtil::typeOf($vars[$data], AppCheckUtil::WIDTH_HALF, AppCheckUtil::TYPE_ANY)) {
                // 文字種が違っています。
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = '『' . $typeNm . '』の文字種が違っています。';
                } else {
                    $errorMessages[$data] = 'The character kind is different. "' . $typeNm . '"';
                }
                return false;
            }
        } else if ($chkKind != AppCheckUtil::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, AppCheckUtil::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, AppCheckUtil::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, AppCheckUtil::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') {

        $elements = AppElements::getInstance();
        $ELEMENTS = &$elements->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 checkNumeric(&$vars, &$errorMessages, $typeNm, $result,
                            $data, $min, $max, $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;
            }
            return true;
        }
        if (!preg_match('/^-?[0-9]+$/', (string)$vars[$data]) ) {
            if ($elementsIdx == '0') {
                $errorMessages[$data] = '『' . $typeNm . '』の文字種が違っています。';    
            } else {
                $errorMessages[$data] = 'The character kind is different. "' . $typeNm . '"';
            }
            return false;
        } else {
            if ((($vars[$data] + 0) < ($min + 0)) || (($vars[$data] + 0) > ($max + 0))) {
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = '『' . $typeNm . '』の数値範囲に入っていません。';    
                } else {
                    $errorMessages[$data] = 'Not in the range of numbers. "' . $typeNm . '"';
                }
                return false;
            }
        }
        return true;
    }

    function checkDotNumeric(&$vars, &$errorMessages, $typeNm, $result,
                            $data, $min, $max, $up, $down, $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;
            }
            return true;
        }
        if (!preg_match('/^-?([0-9]+)(.?)([0-9]*)$/', (string)$vars[$data], $matches )) {
            if ($elementsIdx == '0') {
                $errorMessages[$data] = '『' . $typeNm . '』の文字種が違っています。';    
            } else {
                $errorMessages[$data] = 'The character kind is different. "' . $typeNm . '"';
            }
            return false;
        } else {
            if ((($vars[$data] + 0) < ($min + 0)) || (($vars[$data] + 0) > ($max + 0))) {
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = '『' . $typeNm . '』の数値範囲に入っていません。';    
                } else {
                    $errorMessages[$data] = 'Not in the range of numbers. "' . $typeNm . '"';
                }
                return false;
            } else {
                if (strlen($matches[2]) == 0) { // 小数点がない場合
                    if (strlen($matches[1]) > $up) { // 整数部
                        if ($elementsIdx == '0') {
                            $errorMessages[$data] = '『' . $typeNm . '』の整数部桁数が違っています。';    
                        } else {
                            $errorMessages[$data] = 'Different from the integer digits. "' . $typeNm . '"';
                        }
                        return false;
                    }
                } else { // 小数点がある場合
                    if (strlen($matches[1]) > $up || strlen($matches[1]) == 0) {
                        if ($elementsIdx == '0') {
                            $errorMessages[$data] = '『' . $typeNm . '』の整数部桁数が違っています。';    
                        } else {
                            $errorMessages[$data] = 'Different from the integer digits. "' . $typeNm . '"';
                        }
                        return false;
                    }
                    if (strlen($matches[3]) > $down || strlen($matches[3]) == 0) {
                        if ($elementsIdx == '0') {
                            $errorMessages[$data] = '『' . $typeNm . '』の小数部桁数が違っています。';    
                        } else {
                            $errorMessages[$data] = 'Different from the number of decimal places. "' . $typeNm . '"';
                        }
                        return false;
                    }
                }
            }
        }
        return true;
    }

    /**
     * 指定された文字列が、引数で指定した文字種と一致するかを検査する。<br>
     * <pre>
     *   全角・半角の指定は以下の定数で指定する。
     *    半角:AppCheckUtil::WIDTH_HALF
     *    全角:AppCheckUtil::WIDTH_FULL
     *  
     *   文字列種別の指定は以下の定数で指定する。
     *    数字    :AppCheckUtil::TYPE_NUM
     *    英字    :AppCheckUtil::TYPE_ALPHA
     *    カタカナ  :AppCheckUtil::TYPE_KATAKANA
     *    ひらがな  :AppCheckUtil::TYPE_HIRAKANA
     *    かな    :AppCheckUtil::TYPE_KANA
     *    すべての文字:AppCheckUtil::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 != AppCheckUtil::WIDTH_FULL && $width != AppCheckUtil::WIDTH_HALF) {
            if ($width > AppCheckUtil::WIDTH_FULL) {
                $bigSmall = $width - AppCheckUtil::WIDTH_FULL;
                $width = AppCheckUtil::WIDTH_FULL;
            } else if ($width > AppCheckUtil::WIDTH_HALF) {
                $bigSmall = $width - AppCheckUtil::WIDTH_HALF;
                $width = AppCheckUtil::WIDTH_HALF;
            }
        }

        // 文字幅(全角・半角)を検査
//        if(AppCheckUtil::getStringwidth($targetString) != $width ){
        if(AppCheckUtil::getStringwidth(preg_replace("/\r\n|\n/", "", $targetString)) != $width ){
            return false;
        }
        
        // 文字種を検査
        if( $type == AppCheckUtil::TYPE_ANY ){
            // 文字種が何でもよければ true でリターン
            return true;
        }
        
        // 文字列長分繰り返し
        $targetLen = mb_strlen($targetString, "UTF-8");
        for($i = 0; $i < $targetLen; $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 (AppCheckUtil::WIDTH_HALF == $width) { // 半角のみ大文字小文字のチェックを行う。
                if (AppCheckUtil::BIG == $bigSmall) { // 大文字
                    if('a' <= $moji && $moji <= 'z'){
                        return false;
                    }
                } else if (AppCheckUtil::SMALL == $bigSmall) { // 小文字
                    if('A' <= $moji && $moji <= 'Z'){
                        return false;
                    }
                }
            }

        }
        
        return true;
    }


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

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


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

        // 引数チェック
        if(mb_strwidth($targetString) == 0){
            return AppCheckUtil::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 AppCheckUtil::WIDTH_HALF;

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

            return AppCheckUtil::WIDTH_FULL;

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

            return AppCheckUtil::UNKNOWN;
        }
    }

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

    // 初期UPLOAD時のファイル名チェック
    function checkIUPPhoto(&$vars, &$errorMessages, $typeNm, $result,
                            $data, $inputCheck, $elementsIdx = '0', $exts = array( "jpg", "jpeg", "gif", "png" )) {    
        // 未入力をエラーとするかしないかの切り分け(未入力時は処理終了)
        if (empty($vars[$data])) {
            if ($inputCheck == true ) { // 未入力をチェック
                // ?を入力してください。
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = '『' . $typeNm . '』を入力してください。';
                } else {
                    $errorMessages[$data] = 'Please input "' . $data . '"';
                }
                return false;
            }
            return $result;
        }
        if (mb_strlen($data) < mb_strlen($vars[$data])) {
            if (($data . '.') != mb_substr($vars[$data], 0, mb_strlen($data)+1)) {
                if ($elementsIdx == '0') {
                    $errorMessages[$data] = '『' . $typeNm . '』のファイル名は『' . $data . '.』で始めてください。';
                } else {
                    $errorMessages[$data] = 'Please input "' . $data . '"file name start "' . $data . '."';
                }
                return false;
            }
        } else {
            if ($elementsIdx == '0') {
                $errorMessages[$data] = '『' . $typeNm . '』のファイル名は『' . $data . '.』で始めてください。';
            } else {
                $errorMessages[$data] = 'Please input "' . $data . '"file name start "' . $data . '."';
            }
            return false;
        }

        AppCheckUtil::chkExtension( $vars[$data], $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, AppCheckUtil::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, AppCheckUtil::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;
    }

    //拡張子チェックを行う
    function chkExtension( $src, $exts, &$errorMessage ){
        $extStr = implode( $exts, ")|(" );
        $extStr = '(' . $extStr . ')';
        if( !eregi( "\.({$extStr})$", $src, $regs ) ){
            $errorMessage = 'アップロード可能な画像拡張子は' . implode( $exts, ',' ) . 'です';
            return '';
        }
        return $regs[1];
    }

    //配列にエラーメッセージが含まれるかどうかチェックする
    function chkError( $array ){
        $flag = false;
        foreach( $array as $val ){
            if( !empty( $val ) ){
                $flag = true;
                break;
            }
        }
        return $flag;
    }

}
//  =============================================================
//  2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) End
//  修正BSDライセンス。
//  =============================================================

3/18 0:00-0:30 これは20010/1月ごろクラスに作り直したもの。のせようと思っていたが。今日になってしまった。
3/25 2:00-2:00 ver0.1で使用している「check_functions.php」の中身(「chkExtension」、「chkError」メッソド)を「AppCheckUtil.php」に移動した。
6/9 21:30-22:00 

595行目:for中でmb_strlenを使うと遅そうなので修正した。
<<修正前>>
        // 文字列長分繰り返し
        for($i = 0; $i < mb_strlen($targetString, "UTF-8"); $i++){
<<修正後>>
        // 文字列長分繰り返し
        $targetLen = mb_strlen($targetString, "UTF-8");
        for($i = 0; $i < $targetLen; $i++){

8/14 23:00-24:00 『AppCheckUtil.php』のcheckIUPPhotoメソッド修正。ファイルアップロードPGM作ったらcheckIUPPhotoメソッドがダメだった。ということに気づいた。直接修正した。
2011/1/6 23:00-23:30 8/14 23:00-24:00 『AppCheckUtil.php』のcheckIUPPhotoメソッド修正。でcheckIUPPhotoメソッドの入れる場所を間違ったため『checkPhoto』メソッドが消えていた。かつ『checkIUPPhoto』メソッドが2つになっていた。直接修正した。
2011/1/13 01-30-01-30 checkCommaNumericメソッド削除。checkNumericメソッド追加。checkDotNumericメソッド修正。詳細は『TOOL更新_”バグ情報など”を一つづつ修正している。つづき』 http://d.hatena.ne.jp/kazpgm/20110113/1294931947 参照