source: branches/comu-ver2/data/class/SC_CheckError.php @ 18248

Revision 18248, 42.0 KB checked in by Seasoft, 15 years ago (diff)

直接的な記述に改訂

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