source: branches/feature-module-update/data/class/SC_CheckError.php @ 15899

Revision 15899, 39.5 KB checked in by nanasess, 17 years ago (diff)

EXIST_CHECK で 0 が未入力とされてしまう不具合修正

  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-httpd-php; charset=UTF-8
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7
8/*----------------------------------------------------------------------
9 * [名称] SC_CheckError
10 * [概要] エラーチェッククラス
11 *----------------------------------------------------------------------
12 */
13class SC_CheckError {
14    var $arrErr;
15    var $arrParam;
16
17    // チェック対象の値が含まれる配列をセットする。
18    function SC_CheckError($array = "") {
19        if($array != "") {
20            $this->arrParam = $array;
21        } else {
22            $this->arrParam = $_POST;
23        }
24
25    }
26
27    function doFunc($value, $arrFunc) {
28        foreach ( $arrFunc as $key ) {
29            $this->$key($value);
30        }
31    }
32
33    /* HTMLのタグをチェックする */
34    // value[0] = 項目名 value[1] = 判定対象 value[2] = 許可するタグが格納された配列
35    function HTML_TAG_CHECK($value) {
36        if(isset($this->arrErr[$value[1]])) {
37            return;
38        }
39        $this->createParam($value);
40        // 含まれているタグを抽出する
41        preg_match_all("/<([\/]?[a-z]+)/", $this->arrParam[$value[1]], $arrTag);
42
43        foreach($arrTag[1] as $val) {
44            $find = false;
45
46            foreach($value[2] as $tag) {
47                if(eregi("^" . $tag . "$", $val)) {
48                    $find = true;
49                } else {
50                }
51            }
52
53            if(!$find) {
54                $this->arrErr[$value[1]] = "※ " . $value[0] . "に許可されていないタグ[" . strtoupper($val) . "]が含まれています。<br />";
55                return;
56            }
57        }
58    }
59
60    /* 必須入力の判定 */
61    // value[0] = 項目名 value[1] = 判定対象
62    function EXIST_CHECK( $value ) {            // 受け取りがない場合エラーを返す
63        if(isset($this->arrErr[$value[1]])) {
64            return;
65        }
66        $this->createParam($value);
67        if( strlen($this->arrParam[$value[1]]) == 0 ){
68            $this->arrErr[$value[1]] = "※ " . $value[0] . "が入力されていません。<br />";
69        }
70    }
71
72    /* 必須入力の判定(逆順) */
73    // value[0] = 判定対象 value[1] = 項目名
74    function EXIST_CHECK_REVERSE( $value ) {            // 受け取りがない場合エラーを返す
75        if(isset($this->arrErr[$value[0]])) {
76            return;
77        }
78        $this->createParam($value);
79        if( strlen($this->arrParam[$value[0]]) == 0 ){
80            $this->arrErr[$value[0]] = "※ " . $value[0] . "が入力されていません。<br />";
81        }
82    }
83
84    /* スペース、タブの判定 */
85    // value[0] = 項目名 value[1] = 判定対象
86    function SPTAB_CHECK( $value ) {            // 受け取りがない場合エラーを返す
87        if(isset($this->arrErr[$value[1]])) {
88            return;
89        }
90        $this->createParam($value);
91        if(strlen($this->arrParam[$value[1]]) != 0 && ereg("^[  \t\r\n]+$", $this->arrParam[$value[1]])){
92            $this->arrErr[$value[1]] = "※ " . $value[0] . "にスペース、タブ、改行のみの入力はできません。<br />";
93        }
94    }
95
96    /* スペース、タブの判定 */
97    // value[0] = 項目名 value[1] = 判定対象
98    function NO_SPTAB( $value ) {           // 受け取りがない場合エラーを返す
99        if(isset($this->arrErr[$value[1]])) {
100            return;
101        }
102        $this->createParam($value);
103        if(strlen($this->arrParam[$value[1]]) != 0 && mb_ereg("[  \t\r\n]+", $this->arrParam[$value[1]])){
104            $this->arrErr[$value[1]] = "※ " . $value[0] . "にスペース、タブ、改行は含めないで下さい。<br />";
105        }
106    }
107
108    /* ゼロで開始されている数値の判定 */
109    function ZERO_START($value) {
110        if(isset($this->arrErr[$value[1]])) {
111            return;
112        }
113        $this->createParam($value);
114        if(strlen($this->arrParam[$value[1]]) != 0 && ereg("^[0]+[0-9]+$", $this->arrParam[$value[1]])){
115            $this->arrErr[$value[1]] = "※ " . $value[0] . "に0で始まる数値が入力されています。<br />";
116        }
117    }
118
119    /* 必須選択の判定 */
120    // value[0] = 項目名 value[1] = 判定対象
121    function SELECT_CHECK( $value ) {           // プルダウンなどで選択されていない場合エラーを返す
122        if(isset($this->arrErr[$value[1]])) {
123            return;
124        }
125        $this->createParam($value);
126        if( strlen($this->arrParam[$value[1]]) == 0 ){
127            $this->arrErr[$value[1]] = "※ " . $value[0] . "が選択されていません。<br />";
128        }
129    }
130
131    /* 同一性の判定 */
132    // value[0] = 項目名1 value[1] = 項目名2 value[2] = 判定対象文字列1  value[3] = 判定対象文字列2
133    function EQUAL_CHECK( $value ) {        // 入力が指定文字数以上ならエラーを返す
134        if(isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[3]])) {
135            return;
136        }
137        $this->createParam($value);
138        // 文字数の取得
139        if( $this->arrParam[$value[2]] != $this->arrParam[$value[3]]) {
140            $this->arrErr[$value[2]] = "※ " . $value[0] . "と" . $value[1] . "が一致しません。<br />";
141        }
142    }
143
144    /* 値が異なることの判定 */
145    // value[0] = 項目名1 value[1] = 項目名2 value[2] = 判定対象文字列1  value[3] = 判定対象文字列2
146    function DIFFERENT_CHECK( $value ) {        // 入力が指定文字数以上ならエラーを返す
147        if(isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[3]])) {
148            return;
149        }
150        $this->createParam($value);
151        // 文字数の取得
152        if( $this->arrParam[$value[2]] == $this->arrParam[$value[3]]) {
153            $this->arrErr[$value[2]] = "※ " . $value[0] . "と" . $value[1] . "は、同じ値を使用できません。<br />";
154        }
155    }
156
157    /* 値の大きさを比較する value[2] < value[3]でなければエラー */
158    // value[0] = 項目名1 value[1] = 項目名2 value[2] = 判定対象文字列1  value[3] = 判定対象文字列2
159    function GREATER_CHECK($value) {        // 入力が指定文字数以上ならエラーを返す
160        if(isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[3]])) {
161            return;
162        }
163        $this->createParam($value);
164        // 文字数の取得
165        if($this->arrParam[$value[2]] != "" && $this->arrParam[$value[3]] != "" && ($this->arrParam[$value[2]] > $this->arrParam[$value[3]])) {
166            $this->arrErr[$value[2]] = "※ " . $value[0] . "は" . $value[1] . "より大きい値を入力できません。<br />";
167        }
168    }
169
170
171    /* 最大文字数制限の判定 */
172    // value[0] = 項目名 value[1] = 判定対象文字列  value[2] = 最大文字数(半角も全角も1文字として数える)
173    function MAX_LENGTH_CHECK( $value ) {       // 入力が指定文字数以上ならエラーを返す
174        if(isset($this->arrErr[$value[1]])) {
175            return;
176        }
177        $this->createParam($value);
178        // 文字数の取得
179        if( mb_strlen($this->arrParam[$value[1]]) > $value[2] ) {
180            $this->arrErr[$value[1]] = "※ " . $value[0] . "は" . $value[2] . "字以下で入力してください。<br />";
181        }
182    }
183
184    /* 最小文字数制限の判定 */
185    // value[0] = 項目名 value[1] = 判定対象文字列 value[2] = 最小文字数(半角も全角も1文字として数える)
186    function MIN_LENGTH_CHECK( $value ) {       // 入力が指定文字数未満ならエラーを返す
187        if(isset($this->arrErr[$value[1]])) {
188            return;
189        }
190        $this->createParam($value);
191        // 文字数の取得
192        if( mb_strlen($this->arrParam[$value[1]]) < $value[2] ) {
193            $this->arrErr[$value[1]] = "※ " . $value[0] . "は" . $value[2] . "字以上で入力してください。<br />";
194        }
195    }
196
197    /* 最大文字数制限の判定 */
198    // value[0] = 項目名 value[1] = 判定対象文字列  value[2] = 最大数
199    function MAX_CHECK( $value ) {      // 入力が最大数以上ならエラーを返す
200        if(isset($this->arrErr[$value[1]])) {
201            return;
202        }
203        $this->createParam($value);
204        // 文字数の取得
205        if($this->arrParam[$value[1]] > $value[2] ) {
206            $this->arrErr[$value[1]] = "※ " . $value[0] . "は" . $value[2] . "以下で入力してください。<br />";
207        }
208    }
209
210    /* 最小数値制限の判定 */
211    // value[0] = 項目名 value[1] = 判定対象文字列  value[2] = 最小数
212    function MIN_CHECK( $value ) {      // 入力が最小数未満ならエラーを返す
213        if(isset($this->arrErr[$value[1]])) {
214            return;
215        }
216        $this->createParam($value);
217        if($this->arrParam[$value[1]] < $value[2] ) {
218            $this->arrErr[$value[1]] = "※ " . $value[0] . "は" . $value[2] . "以上で入力してください。<br />";
219        }
220    }
221
222
223    /* 数字の判定 */
224    // value[0] = 項目名 value[1] = 判定対象文字列
225    function NUM_CHECK( $value ) {              // 入力文字が数字以外ならエラーを返す
226        if(isset($this->arrErr[$value[1]])) {
227            return;
228        }
229        $this->createParam($value);
230        if( strlen($this->arrParam[$value[1]]) > 0 && !EregI("^[[:digit:]]+$", $this->arrParam[$value[1]])) {
231            $this->arrErr[$value[1]] = "※ " . $value[0] . "は数字で入力してください。<br />";
232        }
233    }
234
235        /* 小数点を含む数字の判定 */
236    // value[0] = 項目名 value[1] = 判定対象文字列
237    function NUM_POINT_CHECK( $value ) {                // 入力文字が数字以外ならエラーを返す
238        if(isset($this->arrErr[$value[1]])) {
239            return;
240        }
241        $this->createParam($value);
242        if( strlen($this->arrParam[$value[1]]) > 0 && !EregI("^[[:digit:]]+[\.]?[[:digit:]]+$", $this->arrParam[$value[1]])) {
243            $this->arrErr[$value[1]] = "※ " . $value[0] . "は数字で入力してください。<br />";
244        }
245    }
246
247    function ALPHA_CHECK($value) {
248        if(isset($this->arrErr[$value[1]])) {
249            return;
250        }
251        $this->createParam($value);
252        if( strlen($this->arrParam[$value[1]]) > 0 && !EregI("^[[:alpha:]]+$", $this->arrParam[$value[1]])) {
253            $this->arrErr[$value[1]] = "※ " . $value[0] . "は半角英字で入力してください。<br />";
254        }
255    }
256
257    /* 電話番号の判定 (数字チェックと文字数チェックを実施する。)
258        value[0] : 項目名
259        value[1] : 電番1項目目
260        value[2] : 電番2項目目
261        value[3] : 電番3項目目
262        value[4] : 文字数制限
263    */
264    function TEL_CHECK($value) {
265        if(isset($this->arrErr[$value[1]])) {
266            return;
267        }
268        $this->createParam($value);
269        $cnt = 0;
270
271        for($i = 1; $i <= 3; $i++) {
272            if(strlen($this->arrParam[$value[$i]]) > 0) {
273                $cnt++;
274            }
275        }
276
277        // すべての項目が満たされていない場合を判定(一部だけ入力されている状態)
278        if($cnt > 0 && $cnt < 3) {
279            $this->arrErr[$value[1]] .= "※ " . $value[0] . "はすべての項目を入力してください。<br />";
280        }
281
282        for($i = 1; $i <= 3; $i++) {
283            if(strlen($this->arrParam[$value[$i]]) > 0 && strlen($this->arrParam[$value[$i]]) > $value[4]) {
284                $this->arrErr[$value[$i]] .= "※ " . $value[0] . $i . "は" . $value[4] . "字以内で入力してください。<br />";
285            } else if (strlen($this->arrParam[$value[$i]]) > 0 && !EregI("^[[:digit:]]+$", $this->arrParam[$value[$i]])) {
286                $this->arrErr[$value[$i]] .= "※ " . $value[0] . $i . "は数字で入力してください。<br />";
287            }
288        }
289    }
290
291    /* 関連項目が完全に満たされているか判定
292        value[0]        : 項目名
293        value[1]        : 判定対象要素名
294    */
295    function FULL_EXIST_CHECK($value) {
296        $max = count($value);
297        $this->createParam($value);
298        // 既に該当項目にエラーがある場合は、判定しない。
299        for($i = 1; $i < $max; $i++) {
300            if(isset($this->arrErr[$value[$i]])) {
301                return;
302            }
303        }
304
305        $blank = false;
306
307        // すべての項目がブランクでないか、すべての項目が入力されていない場合はエラーとする。
308        for($i = 1; $i < $max; $i++) {
309            if(strlen($this->arrParam[$value[$i]]) <= 0) {
310                $blank = true;
311            }
312        }
313
314        if($blank) {
315            $this->arrErr[$value[1]] = "※ " . $value[0] . "が入力されていません。<br />";
316        }
317    }
318
319    /* 関連項目がすべて満たされているか判定
320        value[0]        : 項目名
321        value[1]        : 判定対象要素名
322    */
323    function ALL_EXIST_CHECK($value) {
324        $max = count($value);
325
326        // 既に該当項目にエラーがある場合は、判定しない。
327        for($i = 1; $i < $max; $i++) {
328            if(isset($this->arrErr[$value[$i]])) {
329                return;
330            }
331        }
332
333        $blank = false;
334        $input = false;
335
336        // すべての項目がブランクでないか、すべての項目が入力されていない場合はエラーとする。
337        for($i = 1; $i < $max; $i++) {
338            if(strlen($this->arrParam[$value[$i]]) <= 0) {
339                $blank = true;
340            } else {
341                $input = true;
342            }
343        }
344
345        if($blank && $input) {
346            $this->arrErr[$value[1]] = "※ " . $value[0] . "はすべての項目を入力して下さい。<br />";
347        }
348    }
349
350        /* 関連項目がどれか一つ満たされているか判定
351        value[0]        : 項目名
352        value[1]        : 判定対象要素名
353    */
354    function ONE_EXIST_CHECK($value) {
355        $max = count($value);
356        $this->createParam($value);
357        // 既に該当項目にエラーがある場合は、判定しない。
358        for($i = 1; $i < $max; $i++) {
359            if(isset($this->arrErr[$value[$i]])) {
360                return;
361            }
362        }
363
364        $input = false;
365
366        // すべての項目がブランクでないか、すべての項目が入力されていない場合はエラーとする。
367        for($i = 1; $i < $max; $i++) {
368            if(strlen($this->arrParam[$value[$i]]) > 0) {
369                $input = true;
370            }
371        }
372
373        if(!$input) {
374            $this->arrErr[$value[1]] = "※ " . $value[0] . "が入力されていません。<br />";
375        }
376    }
377
378    /* 上位の項目が満たされているか判定
379        value[0]        : 項目名
380        value[1]        : 判定対象要素名
381    */
382    function TOP_EXIST_CHECK($value) {
383        $max = count($value);
384        $this->createParam($value);
385
386        // 既に該当項目にエラーがある場合は、判定しない。
387        for($i = 1; $i < $max; $i++) {
388            if(isset($this->arrErr[$value[$i]])) {
389                return;
390            }
391        }
392
393        $blank = false;
394        $error = false;
395
396        // すべての項目がブランクでないか、すべての項目が入力されていない場合はエラーとする。
397        for($i = 1; $i < $max; $i++) {
398            if(strlen($this->arrParam[$value[$i]]) <= 0) {
399                $blank = true;
400            } else {
401                if($blank) {
402                    $error = true;
403                }
404            }
405        }
406
407        if($error) {
408            $this->arrErr[$value[1]] = "※ " . $value[0] . "は先頭の項目から順番に入力して下さい。<br />";
409        }
410    }
411
412
413    /* カタカナの判定 */
414    // value[0] = 項目名 value[1] = 判定対象文字列
415    function KANA_CHECK( $value ) {             // 入力文字がカナ以外ならエラーを返す
416        if(isset($this->arrErr[$value[1]])) {
417            return;
418        }
419        $this->createParam($value);
420        if(strlen($this->arrParam[$value[1]]) > 0 && ! mb_ereg("^[ァ-ヶヲ-゚ー]+$", $this->arrParam[$value[1]])) {
421            $this->arrErr[$value[1]] = "※ " . $value[0] . "はカタカナで入力してください。<br />";
422        }
423    }
424
425    /* カタカナの判定2(タブ、スペースは許可する) */
426    // value[0] = 項目名 value[1] = 判定対象文字列
427    function KANABLANK_CHECK( $value ) {                // 入力文字がカナ以外ならエラーを返す
428        if(isset($this->arrErr[$value[1]])) {
429            return;
430        }
431        $this->createParam($value);
432        if(strlen($this->arrParam[$value[1]]) > 0 && ! mb_ereg("^([  \t\r\n]|[ァ-ヶ]|[ー])+$", $this->arrParam[$value[1]])) {
433            $this->arrErr[$value[1]] = "※ " . $value[0] . "はカタカナで入力してください。<br />";
434        }
435    }
436
437    /* 英数字の判定 */
438    // value[0] = 項目名 value[1] = 判定対象文字列
439    function ALNUM_CHECK( $value ) {                // 入力文字が英数字以外ならエラーを返す
440        if(isset($this->arrErr[$value[1]])) {
441            return;
442        }
443        $this->createParam($value);
444        if( strlen($this->arrParam[$value[1]]) > 0 && ! EregI("^[[:alnum:]]+$", $this->arrParam[$value[1]] ) ) {
445            $this->arrErr[$value[1]] = "※ " . $value[0] . "は英数字で入力してください。<br />";
446        }
447    }
448
449    /* 必須選択の判定 */
450    // value[0] = 項目名 value[1] = 判定対象
451    function ZERO_CHECK( $value ) {             // 入力値で0が許されない場合エラーを返す
452        $this->createParam($value);
453        if($this->arrParam[$value[1]] == "0" ){
454            $this->arrErr[$value[1]] = "※ " . $value[0] . "は1以上を入力してください。<br />";
455        }
456    }
457
458    /* 桁数の判定 (最小最大)*/
459    // value[0] = 項目名 value[1] = 判定対象文字列 value[2] = 最小桁数 value[3] = 最大桁数
460    function NUM_RANGE_CHECK( $value ) {        // 入力文字の桁数判定 → 最小桁数<入力文字列<最大桁数
461        if(isset($this->arrErr[$value[1]])) {
462            return;
463        }
464        $this->createParam($value);
465        // $this->arrParam[$value[0]] = mb_convert_kana($this->arrParam[$value[0]], "n");
466        $count = strlen($this->arrParam[$value[1]]);
467        if( ( $count > 0 ) && $value[2] > $count || $value[3] < $count ) {
468            $this->arrErr[$value[1]] =  "※ $value[0]は$value[2]桁〜$value[3]桁で入力して下さい。<br />";
469        }
470    }
471
472    /* 桁数の判定 */
473    // value[0] = 項目名 value[1] = 判定対象文字列 value[2] = 桁数
474    function NUM_COUNT_CHECK( $value ) {        // 入力文字の桁数判定 → 入力文字列 = 桁数 以外はNGの場合
475        if(isset($this->arrErr[$value[1]])) {
476            return;
477        }
478        $this->createParam($value);
479        $count = strlen($this->arrParam[$value[1]]);
480        if(($count > 0) && $count != $value[2] ) {
481            $this->arrErr[$value[1]] =  "※ $value[0]は$value[2]桁で入力して下さい。<br />";
482        }
483    }
484
485    /* メールアドレス形式の判定 */
486    // value[0] = 項目名 value[1] = 判定対象メールアドレス
487    function EMAIL_CHECK( $value ){             // メールアドレスを正規表現で判定する
488        if(isset($this->arrErr[$value[1]])) {
489            return;
490        }
491        $this->createParam($value);
492        if(strlen($this->arrParam[$value[1]]) > 0 && !ereg("^[^@]+@[^.]+\..+", $this->arrParam[$value[1]])) {
493            $this->arrErr[$value[1]] = "※ " . $value[0] . "の形式が不正です。<br />";
494        }
495    }
496
497    /* メールアドレスに使用できる文字の判定 */
498    //  value[0] = 項目名 value[1] = 判定対象メールアドレス
499    function EMAIL_CHAR_CHECK( $value ){                // メールアドレスに使用する文字を正規表現で判定する
500        if(isset($this->arrErr[$value[1]])) {
501            return;
502        }
503        $this->createParam($value);
504        if(strlen($this->arrParam[$value[1]]) > 0 && !ereg("^[a-zA-Z0-9_\.@\+\?-]+$",$this->arrParam[$value[1]]) ) {
505            $this->arrErr[$value[1]] = "※ " . $value[0] . "に使用する文字を正しく入力してください。<br />";
506        }
507    }
508
509    /* URL形式の判定 */
510    //  value[0] = 項目名 value[1] = 判定対象URL
511    function URL_CHECK( $value ){               // URLを正規表現で判定する。デフォルトでhttp://があってもOK
512         if(isset($this->arrErr[$value[1]])) {
513            return;
514        }
515        if( strlen($this->arrParam[$value[1]]) > 0 && !ereg( "^https?://+($|[a-zA-Z0-9_~=&\?\.\/-])+$", $this->arrParam[$value[1]] ) ) {
516            $this->arrErr[$value[1]] = "※ " . $value[0] . "を正しく入力してください。<br />";
517        }
518    }
519
520    /* 拡張子の判定 */
521    // value[0] = 項目名 value[1] = 判定対象 value[2]=array(拡張子)
522    function FILE_EXT_CHECK( $value ) {         // 受け取りがない場合エラーを返す
523        if(isset($this->arrErr[$value[1]]) || count($value[2]) == 0) {
524            return;
525        }
526        $this->createParam($value);
527
528        if($_FILES[$value[1]]['name'] != "" ) {
529            $errFlag = 1;
530            $array_ext = explode(".", $_FILES[$value[1]]['name']);
531            $ext = $array_ext[ count ( $array_ext ) - 1 ];
532            $ext = strtolower($ext);
533
534            $strExt = "";
535
536            foreach ( $value[2] as $checkExt ){
537                if ( $ext == $checkExt) {
538                    $errFlag = 0;
539                }
540
541                if($strExt == "") {
542                    $strExt.= $checkExt;
543                } else {
544                    $strExt.= "・$checkExt";
545                }
546            }
547        }
548        if ($errFlag == 1) {
549            $this->arrErr[$value[1]] = "※ " . $value[0] . "で許可されている形式は、" . $strExt . "です。<br />";
550        }
551    }
552
553    /* ファイルが存在するかチェックする */
554    // value[0] = 項目名 value[1] = 判定対象  value[2] = 指定ディレクトリ
555    function FIND_FILE( $value ) {          // 受け取りがない場合エラーを返す
556        if(isset($this->arrErr[$value[1]])) {
557            return;
558        }
559
560        $this->createParam($value);
561        if($value[2] != "") {
562            $dir = $value[2];
563        } else {
564            $dir = IMAGE_SAVE_DIR;
565        }
566
567        $path = $dir . "/" . $this->arrParam[$value[1]];
568        $path = ereg_replace("//", "/", $path);
569
570        if($this->arrParam[$value[1]] != "" && !file_exists($path)){
571            $this->arrErr[$value[1]] = "※ " . $path . "が見つかりません。<br />";
572        }
573    }
574
575    /* ファイルが上げられたか確認 */
576    // value[0] = 項目名 value[1] = 判定対象  value[2] = 指定サイズ(KB)
577    function FILE_EXIST_CHECK( $value ) {           // 受け取りがない場合エラーを返す
578        if(isset($this->arrErr[$value[1]])) {
579            return;
580        }
581        $this->createParam($value);
582        if(!($_FILES[$value[1]]['size'] != "" && $_FILES[$value[1]]['size'] > 0)){
583            $this->arrErr[$value[1]] = "※ " . $value[0] . "をアップロードして下さい。<br />";
584        }
585    }
586
587    /* ファイルサイズの判定 */
588    // value[0] = 項目名 value[1] = 判定対象  value[2] = 指定サイズ(KB)
589    function FILE_SIZE_CHECK( $value ) {            // 受け取りがない場合エラーを返す
590        if(isset($this->arrErr[$value[1]])) {
591            return;
592        }
593        $this->createParam($value);
594        if( $_FILES[$value[1]]['size'] > $value[2] *  1024 ){
595            $byte = "KB";
596            if( $value[2] >= 1000 ) {
597                $value[2] = $value[2] / 1000;
598                $byte = "MB";
599            }
600            $this->arrErr[$value[1]] = "※ " . $value[0] . "のファイルサイズは" . $value[2] . $byte . "以下のものを使用してください。<br />";
601        }
602    }
603
604    /* ファイル名の判定 */
605    // value[0] = 項目名 value[1] = 判定対象文字列
606    function FILE_NAME_CHECK( $value ) {                // 入力文字が英数字,"_","-"以外ならエラーを返す
607        if(isset($this->arrErr[$value[1]])) {
608            return;
609        }
610        $this->createParam($value);
611        if( strlen($_FILES[$value[1]]['name']) > 0 && ! EregI("^[[:alnum:]_\.-]+$", $_FILES[$value[1]]['name']) ) {
612            $this->arrErr[$value[1]] = "※ " . $value[0] . "のファイル名に日本語やスペースは使用しないで下さい。<br />";
613        }
614    }
615
616    /* ファイル名の判定(アップロード以外の時) */
617    // value[0] = 項目名 value[1] = 判定対象文字列
618    function FILE_NAME_CHECK_BY_NOUPLOAD( $value ) {            // 入力文字が英数字,"_","-"以外ならエラーを返す
619        if(isset($this->arrErr[$value[1]])) {
620            return;
621        }
622        $this->createParam($value);
623        if( strlen($this->arrParam[$value[1]]) > 0 && ! EregI("^[[:alnum:]_\.-]+$", $this->arrParam[$value[1]]) || EregI("[\\]" ,$this->arrParam[$value[1]])) {
624            $this->arrErr[$value[1]] = "※ " . $value[0] . "のファイル名に日本語やスペースは使用しないで下さい。<br />";
625        }
626    }
627
628    //日付チェック
629    // value[0] = 項目名
630    // value[1] = YYYY
631    // value[2] = MM
632    // value[3] = DD
633    function CHECK_DATE($value) {
634        if(isset($this->arrErr[$value[1]])) {
635            return;
636        }
637        $this->createParam($value);
638        // 少なくともどれか一つが入力されている。
639        if($this->arrParam[$value[1]] > 0 || $this->arrParam[$value[2]] > 0 || $this->arrParam[$value[3]] > 0) {
640            // 年月日のどれかが入力されていない。
641            if(!(strlen($this->arrParam[$value[1]]) > 0 && strlen($this->arrParam[$value[2]]) > 0 && strlen($this->arrParam[$value[3]]) > 0)) {
642                $this->arrErr[$value[1]] = "※ " . $value[0] . "はすべての項目を入力して下さい。<br />";
643            } else if ( ! checkdate($this->arrParam[$value[2]], $this->arrParam[$value[3]], $this->arrParam[$value[1]])) {
644                $this->arrErr[$value[1]] = "※ " . $value[0] . "が正しくありません。<br />";
645            }
646        }
647    }
648
649    //日付チェック
650    // value[0] = 項目名
651    // value[1] = YYYY
652    // value[2] = MM
653    // value[3] = DD
654    // value[4] = HH
655    // value[5] = mm
656    function CHECK_DATE2($value) {
657        if(isset($this->arrErr[$value[1]])) {
658            return;
659        }
660        $this->createParam($value);
661        // 少なくともどれか一つが入力されている。
662        if($this->arrParam[$value[1]] > 0 || $this->arrParam[$value[2]] > 0 || $this->arrParam[$value[3]] > 0 || $this->arrParam[$value[4]] >= 0 || $this->arrParam[$value[5]] >= 0) {
663            // 年月日時のどれかが入力されていない。
664            if(!(strlen($this->arrParam[$value[1]]) > 0 && strlen($this->arrParam[$value[2]]) > 0 && strlen($this->arrParam[$value[3]]) > 0 && strlen($this->arrParam[$value[4]]) > 0 && strlen($this->arrParam[$value[5]]) > 0 )) {
665                $this->arrErr[$value[1]] = "※ " . $value[0] . "はすべての項目を入力して下さい。<br />";
666            } else if ( ! checkdate($this->arrParam[$value[2]], $this->arrParam[$value[3]], $this->arrParam[$value[1]])) {
667                $this->arrErr[$value[1]] = "※ " . $value[0] . "が正しくありません。<br />";
668            }
669        }
670    }
671
672    //日付チェック
673    // value[0] = 項目名
674    // value[1] = YYYY
675    // value[2] = MM
676    function CHECK_DATE3($value) {
677        if(isset($this->arrErr[$value[1]])) {
678            return;
679        }
680        $this->createParam($value);
681        // 少なくともどれか一つが入力されている。
682        if($this->arrParam[$value[1]] > 0 || $this->arrParam[$value[2]] > 0) {
683            // 年月日時のどれかが入力されていない。
684            if(!(strlen($this->arrParam[$value[1]]) > 0 && strlen($this->arrParam[$value[2]]) > 0)) {
685                $this->arrErr[$value[1]] = "※ " . $value[0] . "はすべての項目を入力して下さい。<br />";
686            } else if ( ! checkdate($this->arrParam[$value[2]], 1, $this->arrParam[$value[1]])) {
687                $this->arrErr[$value[1]] = "※ " . $value[0] . "が正しくありません。<br />";
688            }
689        }
690    }
691
692    /*-----------------------------------------------------------------*/
693    /*  CHECK_SET_TERM
694    /*  年月日に別れた2つの期間の妥当性をチェックし、整合性と期間を返す
695    /* 引数 (開始年,開始月,開始日,終了年,終了月,終了日)
696    /* 戻値 array(1,2,3)
697    /*          1.開始年月日 (YYYYMMDD 000000)
698    /*          2.終了年月日 (YYYYMMDD 235959)
699    /*          3.エラー ( 0 = OK, 1 = NG )
700    /*-----------------------------------------------------------------*/
701    // value[0] = 項目名1
702    // value[1] = 項目名2
703    // value[2] = start_year
704    // value[3] = start_month
705    // value[4] = start_day
706    // value[5] = end_year
707    // value[6] = end_month
708    // value[7] = end_day
709    function CHECK_SET_TERM ($value) {
710
711        // 期間指定
712        if(isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[5]])) {
713            return;
714        }
715        $this->createParam($value);
716        $error = 0;
717        if ( (strlen($this->arrParam[$value[2]]) > 0 || strlen($this->arrParam[$value[3]]) > 0 || strlen($this->arrParam[$value[4]] ) > 0) && ! checkdate($this->arrParam[$value[3]], $this->arrParam[$value[4]], $this->arrParam[$value[2]]) ) {
718            $this->arrErr[$value[2]] = "※ " . $value[0] . "を正しく指定してください。<br />";
719        }
720        if ( (strlen($this->arrParam[$value[5]]) > 0 || strlen($this->arrParam[$value[6]]) > 0 || strlen($this->arrParam[$value[7]] ) > 0) && ! checkdate($this->arrParam[$value[6]], $this->arrParam[$value[7]], $this->arrParam[$value[5]]) ) {
721            $this->arrErr[$value[5]] = "※ " . $value[1] . "を正しく指定してください。<br />";
722        }
723        if ( (strlen($this->arrParam[$value[2]]) > 0 && strlen($this->arrParam[$value[3]]) > 0 && strlen($this->arrParam[$value[4]] ) > 0) &&  (strlen($this->arrParam[$value[5]]) > 0 || strlen($this->arrParam[$value[6]]) > 0 || strlen($this->arrParam[$value[7]] ) > 0) ){
724
725            $date1 = $this->arrParam[$value[2]] .sprintf("%02d", $this->arrParam[$value[3]]) .sprintf("%02d",$this->arrParam[$value[4]]) ."000000";
726            $date2 = $this->arrParam[$value[5]] .sprintf("%02d", $this->arrParam[$value[6]]) .sprintf("%02d",$this->arrParam[$value[7]]) ."235959";
727
728            if (($this->arrErr[$value[2]] == "" && $this->arrErr[$value[5]] == "") && $date1 > $date2) {
729                $this->arrErr[$value[2]] = "※ " .$value[0]. "と" .$value[1]. "の期間指定が不正です。<br />";
730            }
731        }
732    }
733
734    /*-----------------------------------------------------------------*/
735    /*  CHECK_SET_TERM2
736    /*  年月日時に別れた2つの期間の妥当性をチェックし、整合性と期間を返す
737    /* 引数 (開始年,開始月,開始日,開始時間,開始分,開始秒,
738    /*        終了年,終了月,終了日,終了時間,終了分,終了秒)
739    /* 戻値 array(1,2,3)
740    /*          1.開始年月日 (YYYYMMDDHHmmss)
741    /*          2.終了年月日 (YYYYMMDDHHmmss)
742    /*          3.エラー ( 0 = OK, 1 = NG )
743    /*-----------------------------------------------------------------*/
744    // value[0] = 項目名1
745    // value[1] = 項目名2
746    // value[2] = start_year
747    // value[3] = start_month
748    // value[4] = start_day
749    // value[5] = start_hour
750    // value[6] = start_minute
751    // value[7] = start_second
752    // value[8] = end_year
753    // value[9] = end_month
754    // value[10] = end_day
755    // value[11] = end_hour
756    // value[12] = end_minute
757    // value[13] = end_second
758
759    /*-----------------------------------------------------------------*/
760    function CHECK_SET_TERM2 ($value) {
761
762        // 期間指定
763        if(isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[8]])) {
764            return;
765        }
766        $this->createParam($value);
767        $error = 0;
768        if ( (strlen($this->arrParam[$value[2]]) > 0 || strlen($this->arrParam[$value[3]]) > 0 || strlen($this->arrParam[$value[4]] ) > 0 || strlen($this->arrParam[$value[5]]) > 0) && ! checkdate($this->arrParam[$value[3]], $this->arrParam[$value[4]], $this->arrParam[$value[2]]) ) {
769            $this->arrErr[$value[2]] = "※ " . $value[0] . "を正しく指定してください。<br />";
770        }
771        if ( (strlen($this->arrParam[$value[8]]) > 0 || strlen($this->arrParam[$value[9]]) > 0 || strlen($this->arrParam[$value[10]] ) > 0 || strlen($this->arrParam[$value[11]] ) > 0) && ! checkdate($this->arrParam[$value[9]], $this->arrParam[$value[10]], $this->arrParam[$value[8]]) ) {
772            $this->arrErr[$value[8]] = "※ " . $value[1] . "を正しく指定してください。<br />";
773        }
774        if ( (strlen($this->arrParam[$value[2]]) > 0 && strlen($this->arrParam[$value[3]]) > 0 && strlen($this->arrParam[$value[4]] ) > 0 && strlen($this->arrParam[$value[5]] ) > 0) &&  (strlen($this->arrParam[$value[8]]) > 0 || strlen($this->arrParam[$value[9]]) > 0 || strlen($this->arrParam[$value[10]] ) > 0 || strlen($this->arrParam[$value[11]] ) > 0) ){
775
776            $date1 = $this->arrParam[$value[2]] .sprintf("%02d", $this->arrParam[$value[3]]) .sprintf("%02d",$this->arrParam[$value[4]]) .sprintf("%02d",$this->arrParam[$value[5]]).sprintf("%02d",$this->arrParam[$value[6]]).sprintf("%02d",$this->arrParam[$value[7]]);
777            $date2 = $this->arrParam[$value[8]] .sprintf("%02d", $this->arrParam[$value[9]]) .sprintf("%02d",$this->arrParam[$value[10]]) .sprintf("%02d",$this->arrParam[$value[11]]).sprintf("%02d",$this->arrParam[$value[12]]).sprintf("%02d",$this->arrParam[$value[13]]);
778
779            if (($this->arrErr[$value[2]] == "" && $this->arrErr[$value[8]] == "") && $date1 > $date2) {
780                $this->arrErr[$value[2]] = "※ " .$value[0]. "と" .$value[1]. "の期間指定が不正です。<br />";
781            }
782            if($date1 == $date2) {
783                $this->arrErr[$value[2]] = "※ " .$value[0]. "と" .$value[1]. "の期間指定が不正です。<br />";
784            }
785
786        }
787    }
788
789    /*-----------------------------------------------------------------*/
790    /*  CHECK_SET_TERM3
791    /*  年月に別れた2つの期間の妥当性をチェックし、整合性と期間を返す
792    /* 引数 (開始年,開始月,終了年,終了月)
793    /* 戻値 array(1,2,3)
794    /*          1.開始年月日 (YYYYMMDD 000000)
795    /*          2.終了年月日 (YYYYMMDD 235959)
796    /*          3.エラー ( 0 = OK, 1 = NG )
797    /*-----------------------------------------------------------------*/
798    // value[0] = 項目名1
799    // value[1] = 項目名2
800    // value[2] = start_year
801    // value[3] = start_month
802    // value[4] = end_year
803    // value[5] = end_month
804    function CHECK_SET_TERM3 ($value) {
805
806        // 期間指定
807        if(isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[4]])) {
808            return;
809        }
810        $this->createParam($value);
811        $error = 0;
812        if ( (strlen($this->arrParam[$value[2]]) > 0 || strlen($this->arrParam[$value[3]]) > 0) && ! checkdate($this->arrParam[$value[3]], 1, $this->arrParam[$value[2]]) ) {
813            $this->arrErr[$value[2]] = "※ " . $value[0] . "を正しく指定してください。<br />";
814        }
815        if ( (strlen($this->arrParam[$value[4]]) > 0 || strlen($this->arrParam[$value[5]]) > 0) && ! checkdate($this->arrParam[$value[5]], 1, $this->arrParam[$value[4]]) ) {
816            $this->arrErr[$value[4]] = "※ " . $value[1] . "を正しく指定してください。<br />";
817        }
818        if ( (strlen($this->arrParam[$value[2]]) > 0 && strlen($this->arrParam[$value[3]]) > 0 && (strlen($this->arrParam[$value[4]]) > 0 || strlen($this->arrParam[$value[5]]) > 0 ))) {
819
820            $date1 = $this->arrParam[$value[2]] .sprintf("%02d", $this->arrParam[$value[3]]);
821            $date2 = $this->arrParam[$value[4]] .sprintf("%02d", $this->arrParam[$value[5]]);
822
823            if (($this->arrErr[$value[2]] == "" && $this->arrErr[$value[5]] == "") && $date1 > $date2) {
824                $this->arrErr[$value[2]] = "※ " .$value[0]. "と" .$value[1]. "の期間指定が不正です。<br />";
825            }
826        }
827    }
828
829    //ディレクトリ存在チェック
830    function DIR_CHECK ($value) {
831        if(isset($this->arrErr[$value[1]])) {
832            return;
833        }
834        $this->createParam($value);
835        if(!is_dir($this->arrParam[$value[1]])) {
836            $this->arrErr[$value[1]] = "※ 指定した" . $value[0] . "は存在しません。<br />";
837        }
838    }
839
840    //ディレクトリ存在チェック
841    function DOMAIN_CHECK ($value) {
842        if(isset($this->arrErr[$value[1]])) {
843            return;
844        }
845        if(strlen($this->arrParam[$value[1]]) > 0 && !ereg("^\.[^.]+\..+", $this->arrParam[$value[1]])) {
846            $this->arrErr[$value[1]] = "※ " . $value[0] . "の形式が不正です。<br />";
847        }
848    }
849
850    /* 携帯メールアドレスの判定 */
851    // value[0] = 項目名 value[1] = 判定対象メールアドレス
852    function MOBILE_EMAIL_CHECK( $value ){              // メールアドレスを正規表現で判定する
853        if(isset($this->arrErr[$value[1]])) {
854            return;
855        }
856        $this->createParam($value);
857        if(strlen($this->arrParam[$value[1]]) > 0 && !gfIsMobileMailAddress($this->arrParam[$value[1]])) {
858            $this->arrErr[$value[1]] = "※ " . $value[0] . "は携帯電話のものではありません。<br />";
859        }
860    }
861    /**
862     * 禁止文字列のチェック
863     * value[0] = 項目名 value[1] = 判定対象文字列
864     * value[2] = 入力を禁止する文字列(配列)
865     *
866     * @example $objErr->doFunc(array("URL", "contents", $arrReviewDenyURL), array("PROHIBITED_STR_CHECK"));
867     */
868    function PROHIBITED_STR_CHECK( $value ) {
869        if( isset($this->arrErr[$value[1]]) || empty($this->arrParam[$value[1]]) ) {
870            return;
871        }
872        $this->createParam($value);
873        $targetStr     = $this->arrParam[$value[1]];
874        $prohibitedStr = str_replace(array('|', '/'), array('\|', '\/'), $value[2]);
875
876        $pattern = '/' . join('|', $prohibitedStr) . '/i';
877        if(preg_match_all($pattern, $this->arrParam[$value[1]], $matches)) {
878            $this->arrErr[$value[1]] = "※ " . $value[0] . "は入力できません。<br />";
879        }
880    }
881
882    /**
883     * PHPコードとして評価可能かチェックする.
884     *
885     * @access private
886     * @param array $value [0] => 項目名, [1] => 評価する文字列
887     * @return void
888     */
889    function EVAL_CHECK($value) {
890        if (isset($this->arrErr[$value[0]])) {
891            return;
892        }
893        $this->createParam($value);
894        if ($this->evalCheck($value[1]) === false) {
895            $this->arrErr[$value[0]] = "※ " . $value[0] . " の形式が不正です。<br />";
896        }
897    }
898
899    /**
900     * $value が PHPコードとして評価可能かチェックする.
901     *
902     * @access private
903     * @param mixed PHPコードとして評価する文字列
904     * @return mixed PHPコードとして評価できない場合 false,
905     *               評価可能な場合は評価した値
906     */
907    function evalCheck($value) {
908        return @eval("return " . $value . ";");
909    }
910
911    /**
912     * 未定義の $this->arrParam に空要素を代入する.
913     *
914     * @access private
915     * @param array $value 配列
916     * @return void
917     */
918    function createParam($value) {
919        foreach ($value as $key) {
920            if (is_string($key) || is_int($key)) {
921                if (!isset($this->arrParam[$key]))  $this->arrParam[$key] = "";
922            }
923        }
924    }
925}
926?>
Note: See TracBrowser for help on using the repository browser.