source: branches/version-2_13_0/data/class/SC_CheckError.php @ 23126

Revision 23126, 49.0 KB checked in by m_uehara, 11 years ago (diff)

#2348 r23116 - r23125 をマージ

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