source: branches/version-2_4/data/class/SC_CheckError.php @ 18517

Revision 18517, 41.2 KB checked in by nanasess, 12 years ago (diff)

merged r18466

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