source: branches/version-2_5-dev/data/class/SC_CheckError.php @ 20541

Revision 20541, 46.5 KB checked in by Seasoft, 15 years ago (diff)

#627(ソース整形・ソースコメントの改善)

  • LF
  • 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-2010 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 = array();
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(preg_match("/^" . $tag . "$/i", $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 (!is_array($this->arrParam[$value[1]]) && strlen($this->arrParam[$value[1]]) == 0 ){
84            $this->arrErr[$value[1]] = "※ " . $value[0] . "が入力されていません。<br />";
85        } else if (is_array($this->arrParam[$value[1]]) && count($this->arrParam[$value[1]]) == 0) {
86            $this->arrErr[$value[1]] = "※ " . $value[0] . "が選択されていません。<br />";
87        }
88    }
89
90    /* 必須入力の判定(逆順) */
91    // value[0] = 判定対象 value[1] = 項目名
92    function EXIST_CHECK_REVERSE( $value ) {            // 受け取りがない場合エラーを返す
93        if(isset($this->arrErr[$value[0]])) {
94            return;
95        }
96        $this->createParam($value);
97        if( strlen($this->arrParam[$value[0]]) == 0 ){
98            $this->arrErr[$value[0]] = "※ " . $value[0] . "が入力されていません。<br />";
99        }
100    }
101
102    /* スペース、タブの判定 */
103    // value[0] = 項目名 value[1] = 判定対象
104    function SPTAB_CHECK( $value ) {            // 受け取りがない場合エラーを返す
105        if(isset($this->arrErr[$value[1]])) {
106            return;
107        }
108        $this->createParam($value);
109        if(strlen($this->arrParam[$value[1]]) != 0 && preg_match("/^[  \t\r\n]+$/", $this->arrParam[$value[1]])){
110            $this->arrErr[$value[1]] = "※ " . $value[0] . "にスペース、タブ、改行のみの入力はできません。<br />";
111        }
112    }
113
114    /* スペース、タブの判定 */
115    // value[0] = 項目名 value[1] = 判定対象
116    function NO_SPTAB( $value ) {           // 受け取りがない場合エラーを返す
117        if(isset($this->arrErr[$value[1]])) {
118            return;
119        }
120        $this->createParam($value);
121        if(strlen($this->arrParam[$value[1]]) != 0 && preg_match("/[  \t\r\n]+/u", $this->arrParam[$value[1]])){
122            $this->arrErr[$value[1]] = "※ " . $value[0] . "にスペース、タブ、改行は含めないで下さい。<br />";
123        }
124    }
125
126    /* ゼロで開始されている数値の判定 */
127    function ZERO_START($value) {
128        if(isset($this->arrErr[$value[1]])) {
129            return;
130        }
131        $this->createParam($value);
132        if(strlen($this->arrParam[$value[1]]) != 0 && preg_match("/^[0]+[0-9]+$/", $this->arrParam[$value[1]])){
133            $this->arrErr[$value[1]] = "※ " . $value[0] . "に0で始まる数値が入力されています。<br />";
134        }
135    }
136
137    /* 必須選択の判定 */
138    // value[0] = 項目名 value[1] = 判定対象
139    function SELECT_CHECK( $value ) {           // プルダウンなどで選択されていない場合エラーを返す
140        if(isset($this->arrErr[$value[1]])) {
141            return;
142        }
143        $this->createParam($value);
144        if( strlen($this->arrParam[$value[1]]) == 0 ){
145            $this->arrErr[$value[1]] = "※ " . $value[0] . "が選択されていません。<br />";
146        }
147    }
148
149    /* 同一性の判定 */
150    // value[0] = 項目名1 value[1] = 項目名2 value[2] = 判定対象文字列1  value[3] = 判定対象文字列2
151    function EQUAL_CHECK( $value ) {        // 入力が指定文字数以上ならエラーを返す
152        if(isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[3]])) {
153            return;
154        }
155        $this->createParam($value);
156        // 文字数の取得
157        if( $this->arrParam[$value[2]] != $this->arrParam[$value[3]]) {
158            $this->arrErr[$value[2]] = "※ " . $value[0] . "と" . $value[1] . "が一致しません。<br />";
159        }
160    }
161
162    /* 値が異なることの判定 */
163    // value[0] = 項目名1 value[1] = 項目名2 value[2] = 判定対象文字列1  value[3] = 判定対象文字列2
164    function DIFFERENT_CHECK( $value ) {        // 入力が指定文字数以上ならエラーを返す
165        if(isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[3]])) {
166            return;
167        }
168        $this->createParam($value);
169        // 文字数の取得
170        if( $this->arrParam[$value[2]] == $this->arrParam[$value[3]]) {
171            $this->arrErr[$value[2]] = "※ " . $value[0] . "と" . $value[1] . "は、同じ値を使用できません。<br />";
172        }
173    }
174
175    /* 値の大きさを比較する value[2] < value[3]でなければエラー */
176    // value[0] = 項目名1 value[1] = 項目名2 value[2] = 判定対象文字列1  value[3] = 判定対象文字列2
177    function GREATER_CHECK($value) {        // 入力が指定文字数以上ならエラーを返す
178        if(isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[3]])) {
179            return;
180        }
181        $this->createParam($value);
182        // 文字数の取得
183        if($this->arrParam[$value[2]] != "" && $this->arrParam[$value[3]] != "" && ($this->arrParam[$value[2]] > $this->arrParam[$value[3]])) {
184            $this->arrErr[$value[2]] = "※ " . $value[0] . "は" . $value[1] . "より大きい値を入力できません。<br />";
185        }
186    }
187
188    /* 最大文字数制限の判定 */
189    // value[0] = 項目名 value[1] = 判定対象文字列  value[2] = 最大文字数(半角も全角も1文字として数える)
190    function MAX_LENGTH_CHECK( $value ) {       // 入力が指定文字数以上ならエラーを返す
191        if(isset($this->arrErr[$value[1]])) {
192            return;
193        }
194        $this->createParam($value);
195        // 文字数の取得
196        if( mb_strlen($this->arrParam[$value[1]]) > $value[2] ) {
197            $this->arrErr[$value[1]] = "※ " . $value[0] . "は" . $value[2] . "字以下で入力してください。<br />";
198        }
199    }
200
201    /* 最小文字数制限の判定 */
202    // value[0] = 項目名 value[1] = 判定対象文字列 value[2] = 最小文字数(半角も全角も1文字として数える)
203    function MIN_LENGTH_CHECK( $value ) {       // 入力が指定文字数未満ならエラーを返す
204        if(isset($this->arrErr[$value[1]])) {
205            return;
206        }
207        $this->createParam($value);
208        // 文字数の取得
209        if( mb_strlen($this->arrParam[$value[1]]) < $value[2] ) {
210            $this->arrErr[$value[1]] = "※ " . $value[0] . "は" . $value[2] . "字以上で入力してください。<br />";
211        }
212    }
213
214    /* 最大文字数制限の判定 */
215    // value[0] = 項目名 value[1] = 判定対象文字列  value[2] = 最大数
216    function MAX_CHECK( $value ) {      // 入力が最大数以上ならエラーを返す
217        if(isset($this->arrErr[$value[1]])) {
218            return;
219        }
220        $this->createParam($value);
221        // 文字数の取得
222        if($this->arrParam[$value[1]] > $value[2] ) {
223            $this->arrErr[$value[1]] = "※ " . $value[0] . "は" . $value[2] . "以下で入力してください。<br />";
224        }
225    }
226
227    /* 最小数値制限の判定 */
228    // value[0] = 項目名 value[1] = 判定対象文字列  value[2] = 最小数
229    function MIN_CHECK( $value ) {      // 入力が最小数未満ならエラーを返す
230        if(isset($this->arrErr[$value[1]])) {
231            return;
232        }
233        $this->createParam($value);
234        if($this->arrParam[$value[1]] < $value[2] ) {
235            $this->arrErr[$value[1]] = "※ " . $value[0] . "は" . $value[2] . "以上で入力してください。<br />";
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 ( $this->numelicCheck($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 && !is_numeric($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 && !ctype_alpha($this->arrParam[$value[1]])) {
269            $this->arrErr[$value[1]] = "※ " . $value[0] . "は半角英字で入力してください。<br />";
270        }
271    }
272
273    /**
274     * 電話番号の判定
275     *
276     * 数字チェックと文字数チェックを実施する。
277     * @param array $value 各要素は以下の通り。<br>
278     *     [0]: 項目名<br>
279     *     [1]: 電番1項目目<br>
280     *     [2]: 電番2項目目<br>
281     *     [3]: 電番3項目目<br>
282     *     [4]: 電話番号各項目制限 (指定なしの場合、TEL_ITEM_LEN)<br>
283     *     [5]: 電話番号総数 (指定なしの場合、TEL_LEN)
284     */
285    function TEL_CHECK($value) {
286        $telItemLen = isset($value[4]) ? $value[4] : TEL_ITEM_LEN;
287        $telLen = isset($value[5]) ? $value[5] : TEL_LEN;
288
289        if (isset($this->arrErr[$value[1]]) || isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[3]])) {
290            return;
291        }
292        $this->createParam($value);
293        $cnt = 0;
294
295        for($i = 1; $i <= 3; $i++) {
296            if(strlen($this->arrParam[$value[$i]]) > 0) {
297                $cnt++;
298            }
299        }
300
301        // すべての項目が満たされていない場合を判定(一部だけ入力されている状態)
302        if($cnt > 0 && $cnt < 3) {
303            $this->arrErr[$value[1]] .= "※ " . $value[0] . "はすべての項目を入力してください。<br />";
304        }
305
306        $total_count = 0;
307        for($i = 1; $i <= 3; $i++) {
308            if(strlen($this->arrParam[$value[$i]]) > 0 && strlen($this->arrParam[$value[$i]]) > $telItemLen) {
309                $this->arrErr[$value[$i]] .= "※ " . $value[0] . $i . "は" . $telItemLen . "字以内で入力してください。<br />";
310            } else if ($this->numelicCheck($this->arrParam[$value[1]])) {
311                $this->arrErr[$value[$i]] .= "※ " . $value[0] . $i . "は数字で入力してください。<br />";
312            }
313            $total_count += strlen($this->arrParam[$value[$i]]);
314        }
315
316        // 合計値チェック
317        if ($total_count > $telLen) {
318            $this->arrErr[$value[3]] .= "※ " . $value[0] . "は" . $telLen . "文字以内で入力してください。<br />";
319        }
320    }
321
322    /* 関連項目が完全に満たされているか判定
323        value[0]        : 項目名
324        value[1]        : 判定対象要素名
325    */
326    function FULL_EXIST_CHECK($value) {
327        $max = count($value);
328        $this->createParam($value);
329        // 既に該当項目にエラーがある場合は、判定しない。
330        for($i = 1; $i < $max; $i++) {
331            if(isset($this->arrErr[$value[$i]])) {
332                return;
333            }
334        }
335
336        $blank = false;
337
338        // すべての項目がブランクでないか、すべての項目が入力されていない場合はエラーとする。
339        for($i = 1; $i < $max; $i++) {
340            if(strlen($this->arrParam[$value[$i]]) <= 0) {
341                $blank = true;
342            }
343        }
344
345        if($blank) {
346            $this->arrErr[$value[1]] = "※ " . $value[0] . "が入力されていません。<br />";
347        }
348    }
349
350    /* 関連項目がすべて満たされているか判定
351        value[0]        : 項目名
352        value[1]        : 判定対象要素名
353    */
354    function ALL_EXIST_CHECK($value) {
355        $max = count($value);
356
357        // 既に該当項目にエラーがある場合は、判定しない。
358        for($i = 1; $i < $max; $i++) {
359            if(isset($this->arrErr[$value[$i]])) {
360                return;
361            }
362        }
363
364        $blank = false;
365        $input = false;
366
367        // すべての項目がブランクでないか、すべての項目が入力されていない場合はエラーとする。
368        for($i = 1; $i < $max; $i++) {
369            if(strlen($this->arrParam[$value[$i]]) <= 0) {
370                $blank = true;
371            } else {
372                $input = true;
373            }
374        }
375
376        if($blank && $input) {
377            $this->arrErr[$value[1]] = "※ " . $value[0] . "はすべての項目を入力して下さい。<br />";
378        }
379    }
380
381        /* 関連項目がどれか一つ満たされているか判定
382        value[0]        : 項目名
383        value[1]        : 判定対象要素名
384    */
385    function ONE_EXIST_CHECK($value) {
386        $max = count($value);
387        $this->createParam($value);
388        // 既に該当項目にエラーがある場合は、判定しない。
389        for($i = 1; $i < $max; $i++) {
390            if(isset($this->arrErr[$value[$i]])) {
391                return;
392            }
393        }
394
395        $input = false;
396
397        // すべての項目がブランクでないか、すべての項目が入力されていない場合はエラーとする。
398        for($i = 1; $i < $max; $i++) {
399            if(strlen($this->arrParam[$value[$i]]) > 0) {
400                $input = true;
401            }
402        }
403
404        if(!$input) {
405            $this->arrErr[$value[1]] = "※ " . $value[0] . "が入力されていません。<br />";
406        }
407    }
408
409    /* 上位の項目が満たされているか判定
410        value[0]        : 項目名
411        value[1]        : 判定対象要素名
412    */
413    function TOP_EXIST_CHECK($value) {
414        $max = count($value);
415        $this->createParam($value);
416
417        // 既に該当項目にエラーがある場合は、判定しない。
418        for($i = 1; $i < $max; $i++) {
419            if(isset($this->arrErr[$value[$i]])) {
420                return;
421            }
422        }
423
424        $blank = false;
425        $error = false;
426
427        // すべての項目がブランクでないか、すべての項目が入力されていない場合はエラーとする。
428        for($i = 1; $i < $max; $i++) {
429            if(strlen($this->arrParam[$value[$i]]) <= 0) {
430                $blank = true;
431            } else {
432                if($blank) {
433                    $error = true;
434                }
435            }
436        }
437
438        if($error) {
439            $this->arrErr[$value[1]] = "※ " . $value[0] . "は先頭の項目から順番に入力して下さい。<br />";
440        }
441    }
442
443    /* カタカナの判定 */
444    // value[0] = 項目名 value[1] = 判定対象文字列
445    function KANA_CHECK( $value ) {             // 入力文字がカナ以外ならエラーを返す
446        if(isset($this->arrErr[$value[1]])) {
447            return;
448        }
449        $this->createParam($value);
450        if(strlen($this->arrParam[$value[1]]) > 0 && !preg_match("/^[ァ-ヶヲ-゚ー]+$/u", $this->arrParam[$value[1]])) {
451            $this->arrErr[$value[1]] = "※ " . $value[0] . "はカタカナで入力してください。<br />";
452        }
453    }
454
455    /* カタカナの判定2 (タブ、スペースは許可する) */
456    // value[0] = 項目名 value[1] = 判定対象文字列
457    function KANABLANK_CHECK( $value ) {                // 入力文字がカナ以外ならエラーを返す
458        if(isset($this->arrErr[$value[1]])) {
459            return;
460        }
461        $this->createParam($value);
462        if(strlen($this->arrParam[$value[1]]) > 0 && !preg_match("/^([  \t\r\n]|[ァ-ヶ]|[ー])+$/u", $this->arrParam[$value[1]])) {
463            $this->arrErr[$value[1]] = "※ " . $value[0] . "はカタカナで入力してください。<br />";
464        }
465    }
466
467    /* 英数字の判定 */
468    // value[0] = 項目名 value[1] = 判定対象文字列
469    function ALNUM_CHECK( $value ) {                // 入力文字が英数字以外ならエラーを返す
470        if(isset($this->arrErr[$value[1]])) {
471            return;
472        }
473        $this->createParam($value);
474        if( strlen($this->arrParam[$value[1]]) > 0 && !ctype_alnum($this->arrParam[$value[1]]) ) {
475            $this->arrErr[$value[1]] = "※ " . $value[0] . "は英数字で入力してください。<br />";
476        }
477    }
478
479    /* 英数記号の判定 */
480    // value[0] = 項目名 value[1] = 判定対象文字列
481    function GRAPH_CHECK( $value ) {                // 入力文字が英数記号以外ならエラーを返す
482        if(isset($this->arrErr[$value[1]])) {
483            return;
484        }
485        $this->createParam($value);
486        if( strlen($this->arrParam[$value[1]]) > 0 && !preg_match("/^[[:graph:]|[:space:]]+$/i", $this->arrParam[$value[1]] ) ) {
487            $this->arrErr[$value[1]] = "※ " . $value[0] . "は英数記号で入力してください。<br />";
488        }
489    }
490
491    /* 必須選択の判定 */
492    // value[0] = 項目名 value[1] = 判定対象
493    function ZERO_CHECK( $value ) {             // 入力値で0が許されない場合エラーを返す
494        $this->createParam($value);
495        if($this->arrParam[$value[1]] == "0" ){
496            $this->arrErr[$value[1]] = "※ " . $value[0] . "は1以上を入力してください。<br />";
497        }
498    }
499
500    /* 桁数の判定 (最小最大)*/
501    // value[0] = 項目名 value[1] = 判定対象文字列 value[2] = 最小桁数 value[3] = 最大桁数
502    function NUM_RANGE_CHECK( $value ) {        // 入力文字の桁数判定 → 最小桁数<入力文字列<最大桁数
503        if(isset($this->arrErr[$value[1]])) {
504            return;
505        }
506        $this->createParam($value);
507        // $this->arrParam[$value[0]] = mb_convert_kana($this->arrParam[$value[0]], 'n');
508        $count = strlen($this->arrParam[$value[1]]);
509        if( ( $count > 0 ) && $value[2] > $count || $value[3] < $count ) {
510            $this->arrErr[$value[1]] =  "※ $value[0]は$value[2]桁~$value[3]桁で入力して下さい。<br />";
511        }
512    }
513
514    /* 桁数の判定 */
515    // value[0] = 項目名 value[1] = 判定対象文字列 value[2] = 桁数
516    function NUM_COUNT_CHECK( $value ) {        // 入力文字の桁数判定 → 入力文字列 = 桁数 以外はNGの場合
517        if(isset($this->arrErr[$value[1]])) {
518            return;
519        }
520        $this->createParam($value);
521        $count = strlen($this->arrParam[$value[1]]);
522        if(($count > 0) && $count != $value[2] ) {
523            $this->arrErr[$value[1]] =  "※ $value[0]は$value[2]桁で入力して下さい。<br />";
524        }
525    }
526
527    /* メールアドレス形式の判定 */
528    // value[0] = 項目名 value[1] = 判定対象メールアドレス
529    function EMAIL_CHECK( $value ){             // メールアドレスを正規表現で判定する
530        if(isset($this->arrErr[$value[1]])) {
531            return;
532        }
533        $this->createParam($value);
534
535        $wsp           = '[\x20\x09]';
536        $vchar         = '[\x21-\x7e]';
537        $quoted_pair   = "\\\\(?:$vchar|$wsp)";
538        $qtext         = '[\x21\x23-\x5b\x5d-\x7e]';
539        $qcontent      = "(?:$qtext|$quoted_pair)";
540        $quoted_string = "\"$qcontent*\"";
541        $atext         = '[a-zA-Z0-9!#$%&\'*+\-\/\=?^_`{|}~]';
542        $dot_atom_text = "$atext+(?:[.]$atext+)*";
543        $dot_atom      = $dot_atom_text;
544        $local_part    = "(?:$dot_atom|$quoted_string)";
545        $domain        = $dot_atom;
546        $addr_spec     = "${local_part}[@]$domain";
547
548        $dot_atom_loose   = "$atext+(?:[.]|$atext)*";
549        $local_part_loose = "(?:$dot_atom_loose|$quoted_string)";
550        $addr_spec_loose  = "${local_part_loose}[@]$domain";
551
552        if (RFC_COMPLIANT_EMAIL_CHECK) {
553            $regexp = "/\A${addr_spec}\z/";
554        } else {
555            // 携帯メールアドレス用に、..や.@を許容する。
556            $regexp = "/\A${addr_spec_loose}\z/";
557        }
558
559        if(strlen($this->arrParam[$value[1]]) > 0 && !preg_match($regexp, $this->arrParam[$value[1]])) {
560            $this->arrErr[$value[1]] = "※ " . $value[0] . "の形式が不正です。<br />";
561        }
562    }
563
564    /* メールアドレスに使用できる文字の判定 */
565    //  value[0] = 項目名 value[1] = 判定対象メールアドレス
566    function EMAIL_CHAR_CHECK( $value ){                // メールアドレスに使用する文字を正規表現で判定する
567        if(isset($this->arrErr[$value[1]])) {
568            return;
569        }
570        $this->createParam($value);
571        if(strlen($this->arrParam[$value[1]]) > 0 && !preg_match("/^[a-zA-Z0-9_\.@\+\?-]+$/i",$this->arrParam[$value[1]]) ) {
572            $this->arrErr[$value[1]] = "※ " . $value[0] . "に使用する文字を正しく入力してください。<br />";
573        }
574    }
575
576    /* URL形式の判定 */
577    //  value[0] = 項目名 value[1] = 判定対象URL
578    function URL_CHECK( $value ){               // URLを正規表現で判定する。デフォルトでhttp://があってもOK
579         if(isset($this->arrErr[$value[1]])) {
580            return;
581        }
582         if( strlen($this->arrParam[$value[1]]) > 0 && !preg_match("@^https?://+($|[a-zA-Z0-9_~=:&\?\.\/-])+$@i", $this->arrParam[$value[1]] ) ) {
583            $this->arrErr[$value[1]] = "※ " . $value[0] . "を正しく入力してください。<br />";
584        }
585    }
586
587    /* IPアドレスの判定 */
588    //  value[0] = 項目名 value[1] = 判定対象IPアドレス文字列
589    function IP_CHECK( $value ){
590        if(isset($this->arrErr[$value[1]])) {
591            return;
592        }
593        //改行コードが含まれている場合には配列に変換
594        $params = str_replace("\r","",$this->arrParam[$value[1]]);
595        if(!empty($params)){
596            if(strpos($params,"\n") === false){
597                $params .= "\n";
598            }
599            $params = explode("\n",$params);
600            foreach($params as $param){
601                $param = trim($param);
602                if(long2ip(ip2long($param)) != trim($param) && !empty($param)) {
603                    $this->arrErr[$value[1]] = "※ " . $value[0] . "に正しい形式のIPアドレスを入力してください。<br />";
604                }
605            }
606        }
607    }
608
609    /* 拡張子の判定 */
610    // value[0] = 項目名 value[1] = 判定対象 value[2]=array(拡張子)
611    function FILE_EXT_CHECK( $value ) {         // 受け取りがない場合エラーを返す
612        if(isset($this->arrErr[$value[1]]) || count($value[2]) == 0) {
613            return;
614        }
615        $this->createParam($value);
616
617        if($_FILES[$value[1]]['name'] != "" ) {
618            $errFlag = 1;
619            $array_ext = explode(".", $_FILES[$value[1]]['name']);
620
621            $strExt = "";
622
623            foreach ( $value[2] as $checkExt ){
624                $ext = "";
625
626                // チェック拡張子のピリオドの数を取得('tar.gz'の場合1個、'jpg'のように通常は0個)
627                $count_period = substr_count($checkExt, ".");
628
629                if($count_period > 0) {
630                    for($i = max(array_keys($array_ext)) - $count_period; $i < count($array_ext); $i++) {
631                        $ext .= $array_ext[$i] . ".";
632                    }
633                    $ext = preg_replace("/.$/", "" ,$ext);
634                } else {
635                    $ext = $array_ext[ count ( $array_ext ) - 1 ];
636                }
637
638                $ext = strtolower($ext);
639
640                if ( $ext == $checkExt) {
641                    $errFlag = 0;
642                }
643
644                if($strExt == "") {
645                    $strExt.= $checkExt;
646                } else {
647                    $strExt.= "・$checkExt";
648                }
649            }
650        }
651        if ($errFlag == 1) {
652            $this->arrErr[$value[1]] = "※ " . $value[0] . "で許可されている形式は、" . $strExt . "です。<br />";
653        }
654    }
655
656    /* ファイルが存在するかチェックする */
657    // value[0] = 項目名 value[1] = 判定対象  value[2] = 指定ディレクトリ
658    function FIND_FILE( $value ) {          // 受け取りがない場合エラーを返す
659        if(isset($this->arrErr[$value[1]])) {
660            return;
661        }
662
663        $this->createParam($value);
664        if($value[2] != "") {
665            $dir = $value[2];
666        } else {
667            $dir = IMAGE_SAVE_REALDIR;
668        }
669
670        $path = $dir . "/" . $this->arrParam[$value[1]];
671        $path = str_replace("//", "/", $path);
672
673        if($this->arrParam[$value[1]] != "" && !file_exists($path)){
674            $this->arrErr[$value[1]] = "※ " . $path . "が見つかりません。<br />";
675        }
676    }
677
678    /* ファイルが上げられたか確認 */
679    // value[0] = 項目名 value[1] = 判定対象  value[2] = 指定サイズ(KB)
680    function FILE_EXIST_CHECK( $value ) {           // 受け取りがない場合エラーを返す
681        if(isset($this->arrErr[$value[1]])) {
682            return;
683        }
684        $this->createParam($value);
685        if(!($_FILES[$value[1]]['size'] != "" && $_FILES[$value[1]]['size'] > 0)){
686            $this->arrErr[$value[1]] = "※ " . $value[0] . "をアップロードして下さい。<br />";
687        }
688    }
689
690    /* ファイルサイズの判定 */
691    // value[0] = 項目名 value[1] = 判定対象  value[2] = 指定サイズ(KB)
692    function FILE_SIZE_CHECK( $value ) {            // 受け取りがない場合エラーを返す
693        if(isset($this->arrErr[$value[1]])) {
694            return;
695        }
696        $this->createParam($value);
697        if( $_FILES[$value[1]]['size'] > $value[2] *  1024 ){
698            $byte = 'KB';
699            if( $value[2] >= 1000 ) {
700                $value[2] = $value[2] / 1000;
701                $byte = 'MB';
702            }
703            $this->arrErr[$value[1]] = "※ " . $value[0] . "のファイルサイズは" . $value[2] . $byte . "以下のものを使用してください。<br />";
704        }
705    }
706
707    /* ファイル名の判定 */
708    // value[0] = 項目名 value[1] = 判定対象文字列
709    function FILE_NAME_CHECK( $value ) {                // 入力文字が英数字,"_","-"以外ならエラーを返す
710        if(isset($this->arrErr[$value[1]])) {
711            return;
712        }
713        $this->createParam($value);
714        if( strlen($_FILES[$value[1]]['name']) > 0 && !preg_match("/^[[:alnum:]_\.-]+$/i", $_FILES[$value[1]]['name']) ) {
715            $this->arrErr[$value[1]] = "※ " . $value[0] . "のファイル名に日本語やスペースは使用しないで下さい。<br />";
716        }
717    }
718
719    /* ファイル名の判定(アップロード以外の時) */
720    // value[0] = 項目名 value[1] = 判定対象文字列
721    function FILE_NAME_CHECK_BY_NOUPLOAD( $value ) {            // 入力文字が英数字,"_","-"以外ならエラーを返す
722        if(isset($this->arrErr[$value[1]])) {
723            return;
724        }
725        $this->createParam($value);
726        if( strlen($this->arrParam[$value[1]]) > 0 && !preg_match("/^[[:alnum:]_\.-]+$/i", $this->arrParam[$value[1]]) || preg_match("/[\\]/" ,$this->arrParam[$value[1]])) {
727            $this->arrErr[$value[1]] = "※ " . $value[0] . "のファイル名に日本語やスペースは使用しないで下さい。<br />";
728        }
729    }
730
731    //日付チェック
732    // value[0] = 項目名
733    // value[1] = YYYY
734    // value[2] = MM
735    // value[3] = DD
736    function CHECK_DATE($value) {
737        if(isset($this->arrErr[$value[1]])) {
738            return;
739        }
740        $this->createParam($value);
741        // 少なくともどれか一つが入力されている。
742        if($this->arrParam[$value[1]] > 0 || $this->arrParam[$value[2]] > 0 || $this->arrParam[$value[3]] > 0) {
743            // 年月日のどれかが入力されていない。
744            if(!(strlen($this->arrParam[$value[1]]) > 0 && strlen($this->arrParam[$value[2]]) > 0 && strlen($this->arrParam[$value[3]]) > 0)) {
745                $this->arrErr[$value[1]] = "※ " . $value[0] . "はすべての項目を入力して下さい。<br />";
746            } else if ( ! checkdate($this->arrParam[$value[2]], $this->arrParam[$value[3]], $this->arrParam[$value[1]])) {
747                $this->arrErr[$value[1]] = "※ " . $value[0] . "が正しくありません。<br />";
748            }
749        }
750    }
751
752    //日付チェック
753    // value[0] = 項目名
754    // value[1] = YYYY
755    // value[2] = MM
756    // value[3] = DD
757    // value[4] = HH
758    // value[5] = mm
759    function CHECK_DATE2($value) {
760        if(isset($this->arrErr[$value[1]])) {
761            return;
762        }
763        $this->createParam($value);
764        // 少なくともどれか一つが入力されている。
765        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) {
766            // 年月日時のどれかが入力されていない。
767            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 )) {
768                $this->arrErr[$value[1]] = "※ " . $value[0] . "はすべての項目を入力して下さい。<br />";
769            } else if ( ! checkdate($this->arrParam[$value[2]], $this->arrParam[$value[3]], $this->arrParam[$value[1]])) {
770                $this->arrErr[$value[1]] = "※ " . $value[0] . "が正しくありません。<br />";
771            }
772        }
773    }
774
775    //日付チェック
776    // value[0] = 項目名
777    // value[1] = YYYY
778    // value[2] = MM
779    function CHECK_DATE3($value) {
780        if(isset($this->arrErr[$value[1]])) {
781            return;
782        }
783        $this->createParam($value);
784        // 少なくともどれか一つが入力されている。
785        if($this->arrParam[$value[1]] > 0 || $this->arrParam[$value[2]] > 0) {
786            // 年月日時のどれかが入力されていない。
787            if(!(strlen($this->arrParam[$value[1]]) > 0 && strlen($this->arrParam[$value[2]]) > 0)) {
788                $this->arrErr[$value[1]] = "※ " . $value[0] . "はすべての項目を入力して下さい。<br />";
789            } else if ( ! checkdate($this->arrParam[$value[2]], 1, $this->arrParam[$value[1]])) {
790                $this->arrErr[$value[1]] = "※ " . $value[0] . "が正しくありません。<br />";
791            }
792        }
793    }
794
795    //誕生日チェック
796    // value[0] = 項目名
797    // value[1] = YYYY
798    // value[2] = MM
799    // value[3] = DD
800    function CHECK_BIRTHDAY($value) {
801        if (isset($this->arrErr[$value[1]])) {
802            return;
803        }
804
805        $this->createParam($value);
806        // 年が入力されている。
807        if ($this->arrParam[$value[1]] > 0) {
808
809            // 年の数字チェック、最小数値制限チェック
810            $this->doFunc(array($value[0].'(年)', $value[1], BIRTH_YEAR), array("NUM_CHECK", "MIN_CHECK"));
811            // 上のチェックでエラーある場合、中断する。
812            if (isset($this->arrErr[$value[1]])) {
813                return;
814            }
815
816            // 年の最大数値制限チェック
817            $this->doFunc(array($value[0].'(年)', $value[1], date('Y',strtotime('now'))), array("MAX_CHECK"));
818            // 上のチェックでエラーある場合、中断する。
819            if (isset($this->arrErr[$value[1]])) {
820                return;
821            }
822        }
823
824        // XXX createParam() が二重に呼ばれる問題を抱える
825        $this->CHECK_DATE($value);
826    }
827
828    /*-----------------------------------------------------------------*/
829    /*  CHECK_SET_TERM
830    /*  年月日に別れた2つの期間の妥当性をチェックし、整合性と期間を返す
831    /* 引数 (開始年,開始月,開始日,終了年,終了月,終了日)
832    /* 戻値 array(1,2,3)
833    /*          1.開始年月日 (YYYYMMDD 000000)
834    /*          2.終了年月日 (YYYYMMDD 235959)
835    /*          3.エラー ( 0 = OK, 1 = NG )
836    /*-----------------------------------------------------------------*/
837    // value[0] = 項目名1
838    // value[1] = 項目名2
839    // value[2] = start_year
840    // value[3] = start_month
841    // value[4] = start_day
842    // value[5] = end_year
843    // value[6] = end_month
844    // value[7] = end_day
845    function CHECK_SET_TERM ($value) {
846
847        // 期間指定
848        if(isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[5]])) {
849            return;
850        }
851        $this->createParam($value);
852        $error = 0;
853        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]]) ) {
854            $this->arrErr[$value[2]] = "※ " . $value[0] . "を正しく指定してください。<br />";
855        }
856        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]]) ) {
857            $this->arrErr[$value[5]] = "※ " . $value[1] . "を正しく指定してください。<br />";
858        }
859        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) ){
860
861            $date1 = $this->arrParam[$value[2]] .sprintf("%02d", $this->arrParam[$value[3]]) .sprintf("%02d",$this->arrParam[$value[4]]) ."000000";
862            $date2 = $this->arrParam[$value[5]] .sprintf("%02d", $this->arrParam[$value[6]]) .sprintf("%02d",$this->arrParam[$value[7]]) ."235959";
863
864            if (($this->arrErr[$value[2]] == "" && $this->arrErr[$value[5]] == "") && $date1 > $date2) {
865                $this->arrErr[$value[2]] = "※ " .$value[0]. "と" .$value[1]. "の期間指定が不正です。<br />";
866            }
867        }
868    }
869
870    /*-----------------------------------------------------------------*/
871    /*  CHECK_SET_TERM2
872    /*  年月日時に別れた2つの期間の妥当性をチェックし、整合性と期間を返す
873    /* 引数 (開始年,開始月,開始日,開始時間,開始分,開始秒,
874    /*        終了年,終了月,終了日,終了時間,終了分,終了秒)
875    /* 戻値 array(1,2,3)
876    /*          1.開始年月日 (YYYYMMDDHHmmss)
877    /*          2.終了年月日 (YYYYMMDDHHmmss)
878    /*          3.エラー ( 0 = OK, 1 = NG )
879    /*-----------------------------------------------------------------*/
880    // value[0] = 項目名1
881    // value[1] = 項目名2
882    // value[2] = start_year
883    // value[3] = start_month
884    // value[4] = start_day
885    // value[5] = start_hour
886    // value[6] = start_minute
887    // value[7] = start_second
888    // value[8] = end_year
889    // value[9] = end_month
890    // value[10] = end_day
891    // value[11] = end_hour
892    // value[12] = end_minute
893    // value[13] = end_second
894
895    /*-----------------------------------------------------------------*/
896    function CHECK_SET_TERM2 ($value) {
897
898        // 期間指定
899        if(isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[8]])) {
900            return;
901        }
902        $this->createParam($value);
903        $error = 0;
904        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]]) ) {
905            $this->arrErr[$value[2]] = "※ " . $value[0] . "を正しく指定してください。<br />";
906        }
907        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]]) ) {
908            $this->arrErr[$value[8]] = "※ " . $value[1] . "を正しく指定してください。<br />";
909        }
910        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) ){
911
912            $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]]);
913            $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]]);
914
915            if (($this->arrErr[$value[2]] == "" && $this->arrErr[$value[8]] == "") && $date1 > $date2) {
916                $this->arrErr[$value[2]] = "※ " .$value[0]. "と" .$value[1]. "の期間指定が不正です。<br />";
917            }
918            if($date1 == $date2) {
919                $this->arrErr[$value[2]] = "※ " .$value[0]. "と" .$value[1]. "の期間指定が不正です。<br />";
920            }
921
922        }
923    }
924
925    /*-----------------------------------------------------------------*/
926    /*  CHECK_SET_TERM3
927    /*  年月に別れた2つの期間の妥当性をチェックし、整合性と期間を返す
928    /* 引数 (開始年,開始月,終了年,終了月)
929    /* 戻値 array(1,2,3)
930    /*          1.開始年月日 (YYYYMMDD 000000)
931    /*          2.終了年月日 (YYYYMMDD 235959)
932    /*          3.エラー ( 0 = OK, 1 = NG )
933    /*-----------------------------------------------------------------*/
934    // value[0] = 項目名1
935    // value[1] = 項目名2
936    // value[2] = start_year
937    // value[3] = start_month
938    // value[4] = end_year
939    // value[5] = end_month
940    function CHECK_SET_TERM3 ($value) {
941
942        // 期間指定
943        if(isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[4]])) {
944            return;
945        }
946        $this->createParam($value);
947        $error = 0;
948        if ( (strlen($this->arrParam[$value[2]]) > 0 || strlen($this->arrParam[$value[3]]) > 0) && ! checkdate($this->arrParam[$value[3]], 1, $this->arrParam[$value[2]]) ) {
949            $this->arrErr[$value[2]] = "※ " . $value[0] . "を正しく指定してください。<br />";
950        }
951        if ( (strlen($this->arrParam[$value[4]]) > 0 || strlen($this->arrParam[$value[5]]) > 0) && ! checkdate($this->arrParam[$value[5]], 1, $this->arrParam[$value[4]]) ) {
952            $this->arrErr[$value[4]] = "※ " . $value[1] . "を正しく指定してください。<br />";
953        }
954        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 ))) {
955
956            $date1 = $this->arrParam[$value[2]] .sprintf("%02d", $this->arrParam[$value[3]]);
957            $date2 = $this->arrParam[$value[4]] .sprintf("%02d", $this->arrParam[$value[5]]);
958
959            if (($this->arrErr[$value[2]] == "" && $this->arrErr[$value[5]] == "") && $date1 > $date2) {
960                $this->arrErr[$value[2]] = "※ " .$value[0]. "と" .$value[1]. "の期間指定が不正です。<br />";
961            }
962        }
963    }
964
965    //ディレクトリ存在チェック
966    function DIR_CHECK ($value) {
967        if(isset($this->arrErr[$value[1]])) {
968            return;
969        }
970        $this->createParam($value);
971        if(!is_dir($this->arrParam[$value[1]])) {
972            $this->arrErr[$value[1]] = "※ 指定した" . $value[0] . "は存在しません。<br />";
973        }
974    }
975
976    // ドメインチェック
977    function DOMAIN_CHECK ($value) {
978        if(isset($this->arrErr[$value[1]])) {
979            return;
980        }
981        if(strlen($this->arrParam[$value[1]]) > 0 && !preg_match("/^\.[^.]+\..+/i", $this->arrParam[$value[1]])) {
982            $this->arrErr[$value[1]] = "※ " . $value[0] . "の形式が不正です。<br />";
983        }
984    }
985
986    /* 携帯メールアドレスの判定 */
987    // value[0] = 項目名 value[1] = 判定対象メールアドレス
988    function MOBILE_EMAIL_CHECK( $value ){              // メールアドレスを正規表現で判定する
989        if(isset($this->arrErr[$value[1]])) {
990            return;
991        }
992        $this->createParam($value);
993        $objMobile = new SC_Helper_Mobile_Ex();
994        if(strlen($this->arrParam[$value[1]]) > 0 && !$objMobile->gfIsMobileMailAddress($this->arrParam[$value[1]])) {
995            $this->arrErr[$value[1]] = "※ " . $value[0] . "は携帯電話のものではありません。<br />";
996        }
997    }
998
999    /**
1000     * CHECK_REGIST_CUSTOMER_EMAIL
1001     *
1002     * メールアドレスが会員登録されているか調べる
1003     * value[0] = 項目名 value[1] = 判定対象メールアドレス
1004     *
1005     * @param mixed $value
1006     * @access public
1007     * @return void
1008     */
1009    function CHECK_REGIST_CUSTOMER_EMAIL ($value) {
1010        if(isset($this->arrErr[$value[1]])) {
1011            return;
1012        }
1013        $this->createParam($value);
1014
1015        $register_user_flg =  SC_Helper_Customer_Ex::sfCheckRegisterUserFromEmail($this->arrParam[$value[1]]);
1016        switch($register_user_flg) {
1017            case 1:
1018                $this->arrErr[$value[1]] .= "※ すでに会員登録で使用されている" . $value[0] . "です。<br />";
1019                break;
1020            case 2:
1021                $this->arrErr[$value[1]] .= "※ 退会から一定期間の間は、同じ" . $value[0] . "を使用することはできません。<br />";
1022                break;
1023            default:
1024                break;
1025        }
1026    }
1027
1028    /**
1029     * 禁止文字列のチェック
1030     * value[0] = 項目名 value[1] = 判定対象文字列
1031     * value[2] = 入力を禁止する文字列(配列)
1032     *
1033     * @example $objErr->doFunc(array('URL', 'contents', $arrReviewDenyURL), array("PROHIBITED_STR_CHECK"));
1034     */
1035    function PROHIBITED_STR_CHECK( $value ) {
1036        if( isset($this->arrErr[$value[1]]) || empty($this->arrParam[$value[1]]) ) {
1037            return;
1038        }
1039        $this->createParam($value);
1040        $targetStr     = $this->arrParam[$value[1]];
1041        $prohibitedStr = str_replace(array('|', '/'), array('\|', '\/'), $value[2]);
1042
1043        $pattern = '/' . join('|', $prohibitedStr) . '/i';
1044        if(preg_match_all($pattern, $this->arrParam[$value[1]], $matches)) {
1045            $this->arrErr[$value[1]] = "※ " . $value[0] . "は入力できません。<br />";
1046        }
1047    }
1048
1049    /**
1050     * PHPコードとして評価可能かチェックする.
1051     *
1052     * @access private
1053     * @param array $value [0] => 項目名, [1] => 評価する文字列
1054     * @return void
1055     */
1056    function EVAL_CHECK($value) {
1057        if (isset($this->arrErr[$value[0]])) {
1058            return;
1059        }
1060        $this->createParam($value);
1061        if ($this->evalCheck($value[1]) === false) {
1062            $this->arrErr[$value[0]] = "※ " . $value[0] . " の形式が不正です。<br />";
1063        }
1064    }
1065
1066    /**
1067     * $value が PHPコードとして評価可能かチェックする.
1068     *
1069     * @access private
1070     * @param mixed PHPコードとして評価する文字列
1071     * @return mixed PHPコードとして評価できない場合 false,
1072     *               評価可能な場合は評価した値
1073     */
1074    function evalCheck($value) {
1075        // falseは、正当な式と評価する。
1076        if($value === 'false') {
1077            return true;
1078        }
1079        return @eval("return " . $value . ";");
1080    }
1081
1082    /**
1083     * 未定義の $this->arrParam に空要素を代入する.
1084     *
1085     * @access private
1086     * @param array $value 配列
1087     * @return void
1088     */
1089    function createParam($value) {
1090        foreach ($value as $key) {
1091            if (is_string($key) || is_int($key)) {
1092                if (!isset($this->arrParam[$key]))  $this->arrParam[$key] = "";
1093            }
1094        }
1095    }
1096
1097    /*
1098     * 値が数字だけかどうかチェックする
1099     *
1100     * @access private
1101     */
1102    function numelicCheck($string) {
1103        return strlen($string) > 0 && !ctype_digit($string);
1104    }
1105}
1106?>
Note: See TracBrowser for help on using the repository browser.