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

Revision 20658, 47.9 KB checked in by nanasess, 13 years ago (diff)

#1145(商品追加で「※ 数量は数字で入力してください。」エラーが表示される)

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