source: branches/version-2_11-dev/data/class/SC_CheckError.php @ 21290

Revision 21290, 48.3 KB checked in by shutta, 9 years ago (diff)

refs #1493 (【2.11.1】パスワード確認時に、数字のみで0から始まるパスワードは0を読まない)
EQUAL_CHECK関数にて項目を比較する際に、!=ではなく、!===で厳密に比較するように修正。

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