Changeset 22912
- Timestamp:
- 2013/06/28 15:04:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_13-dev/data/class/SC_CheckError.php
r22911 r22912 27 27 *---------------------------------------------------------------------- 28 28 */ 29 class SC_CheckError { 29 class SC_CheckError 30 { 30 31 var $arrErr = array(); 31 32 var $arrParam; 32 33 33 34 // チェック対象の値が含まれる配列をセットする。 34 function __construct($array = '') { 35 function __construct($array = '') 36 { 35 37 if ($array != '') { 36 38 $this->arrParam = $array; … … 41 43 } 42 44 43 function doFunc($value, $arrFunc) { 45 function doFunc($value, $arrFunc) 46 { 44 47 foreach ($arrFunc as $key) { 45 48 $this->$key($value); … … 53 56 * @return void 54 57 */ 55 function HTML_TAG_CHECK($value) { 58 function HTML_TAG_CHECK($value) 59 { 56 60 if (isset($this->arrErr[$value[1]])) { 57 61 return; … … 59 63 $this->createParam($value); 60 64 // HTMLに含まれているタグを抽出する 61 preg_match_all('/<\/?([a-z]+)/i', $this->arrParam[$value[1]], $arrTagIncludedHtml = array()); 62 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 } 63 71 $arrDiffTag = array_diff($arrTagIncludedHtml[1], $value[2]); 64 72 … … 81 89 * @return void 82 90 */ 83 function EXIST_CHECK($value) { 91 function EXIST_CHECK($value) 92 { 84 93 if (isset($this->arrErr[$value[1]])) { 85 94 return; … … 100 109 * @return void 101 110 */ 102 function EXIST_CHECK_REVERSE($value) { 111 function EXIST_CHECK_REVERSE($value) 112 { 103 113 if (isset($this->arrErr[$value[0]])) { 104 114 return; 105 115 } 106 //$this->createParam($value);116 $this->createParam($value); 107 117 if (strlen($this->arrParam[$value[0]]) == 0) { 108 118 $this->arrErr[$value[0]] = '※ ' . $value[0] . 'が入力されていません。<br />'; … … 117 127 * @return void 118 128 */ 119 function SPTAB_CHECK($value) { 129 function SPTAB_CHECK($value) 130 { 120 131 if (isset($this->arrErr[$value[1]])) { 121 132 return; … … 134 145 * @return void 135 146 */ 136 function NO_SPTAB($value) { 147 function NO_SPTAB($value) 148 { 137 149 if (isset($this->arrErr[$value[1]])) { 138 150 return; … … 145 157 146 158 /* ゼロで開始されている数値の判定 */ 147 function ZERO_START($value) { 159 function ZERO_START($value) 160 { 148 161 if (isset($this->arrErr[$value[1]])) { 149 162 return; … … 162 175 * @return void 163 176 */ 164 function SELECT_CHECK($value) { 177 function SELECT_CHECK($value) 178 { 165 179 if (isset($this->arrErr[$value[1]])) { 166 180 return; … … 179 193 * @return void 180 194 */ 181 function EQUAL_CHECK($value) { 195 function EQUAL_CHECK($value) 196 { 182 197 if (isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[3]])) { 183 198 return; 184 199 } 185 //$this->createParam($value);200 $this->createParam($value); 186 201 // 文字数の取得 187 202 if ($this->arrParam[$value[2]] !== $this->arrParam[$value[3]]) { … … 197 212 * @return void 198 213 */ 199 function DIFFERENT_CHECK($value) { 214 function DIFFERENT_CHECK($value) 215 { 200 216 if (isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[3]])) { 201 217 return; 202 218 } 203 //$this->createParam($value);219 $this->createParam($value); 204 220 // 文字数の取得 205 221 if ($this->arrParam[$value[2]] == $this->arrParam[$value[3]]) { … … 215 231 * @return void 216 232 */ 217 function GREATER_CHECK($value) { 233 function GREATER_CHECK($value) 234 { 218 235 if (isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[3]])) { 219 236 return; 220 237 } 221 //$this->createParam($value);238 $this->createParam($value); 222 239 // 文字数の取得 223 240 if ($this->arrParam[$value[2]] != '' && $this->arrParam[$value[3]] != '' && ($this->arrParam[$value[2]] > $this->arrParam[$value[3]])) { … … 233 250 * @return void 234 251 */ 235 function MAX_LENGTH_CHECK($value) { 252 function MAX_LENGTH_CHECK($value) 253 { 236 254 if (isset($this->arrErr[$value[1]])) { 237 255 return; … … 251 269 * @return void 252 270 */ 253 function MIN_LENGTH_CHECK($value) { 271 function MIN_LENGTH_CHECK($value) 272 { 254 273 if (isset($this->arrErr[$value[1]])) { 255 274 return; … … 269 288 * @return void 270 289 */ 271 function MAX_CHECK($value) { 290 function MAX_CHECK($value) 291 { 272 292 if (isset($this->arrErr[$value[1]])) { 273 293 return; … … 287 307 * @return void 288 308 */ 289 function MIN_CHECK($value) { 309 function MIN_CHECK($value) 310 { 290 311 if (isset($this->arrErr[$value[1]])) { 291 312 return; … … 304 325 * @return void 305 326 */ 306 function NUM_CHECK($value) { 327 function NUM_CHECK($value) 328 { 307 329 if (isset($this->arrErr[$value[1]])) { 308 330 return; … … 321 343 * @return void 322 344 */ 323 function NUM_POINT_CHECK($value) { 345 function NUM_POINT_CHECK($value) 346 { 324 347 if (isset($this->arrErr[$value[1]])) { 325 348 return; … … 331 354 } 332 355 333 function ALPHA_CHECK($value) { 356 function ALPHA_CHECK($value) 357 { 334 358 if (isset($this->arrErr[$value[1]])) { 335 359 return; … … 354 378 * @return void 355 379 */ 356 function TEL_CHECK($value) { 380 function TEL_CHECK($value) 381 { 357 382 $telItemLen = isset($value[4]) ? $value[4] : TEL_ITEM_LEN; 358 383 $telLen = isset($value[5]) ? $value[5] : TEL_LEN; … … 395 420 value[1] : 判定対象要素名 396 421 */ 397 function FULL_EXIST_CHECK($value) { 422 function FULL_EXIST_CHECK($value) 423 { 398 424 $max = count($value); 399 425 $this->createParam($value); … … 423 449 value[1] : 判定対象要素名 424 450 */ 425 function ALL_EXIST_CHECK($value) { 451 function ALL_EXIST_CHECK($value) 452 { 426 453 $max = count($value); 427 454 … … 454 481 value[1] : 判定対象要素名 455 482 */ 456 function ONE_EXIST_CHECK($value) { 483 function ONE_EXIST_CHECK($value) 484 { 457 485 $max = count($value); 458 486 $this->createParam($value); … … 482 510 value[1] : 判定対象要素名 483 511 */ 484 function TOP_EXIST_CHECK($value) { 512 function TOP_EXIST_CHECK($value) 513 { 485 514 $max = count($value); 486 515 $this->createParam($value); … … 515 544 // 入力文字がカナ以外ならエラーを返す 516 545 // value[0] = 項目名 value[1] = 判定対象文字列 517 function KANA_CHECK($value) { 546 function KANA_CHECK($value) 547 { 518 548 if (isset($this->arrErr[$value[1]])) { 519 549 return; … … 528 558 // 入力文字がカナ以外ならエラーを返す 529 559 // value[0] = 項目名 value[1] = 判定対象文字列 530 function KANABLANK_CHECK($value) { 560 function KANABLANK_CHECK($value) 561 { 531 562 if (isset($this->arrErr[$value[1]])) { 532 563 return; … … 541 572 // 入力文字が英数字以外ならエラーを返す 542 573 // value[0] = 項目名 value[1] = 判定対象文字列 543 function ALNUM_CHECK($value) { 574 function ALNUM_CHECK($value) 575 { 544 576 if (isset($this->arrErr[$value[1]])) { 545 577 return; … … 554 586 // 入力文字が英数記号以外ならエラーを返す 555 587 // value[0] = 項目名 value[1] = 判定対象文字列 556 function GRAPH_CHECK($value) { 588 function GRAPH_CHECK($value) 589 { 557 590 if (isset($this->arrErr[$value[1]])) { 558 591 return; … … 567 600 // 入力値で0が許されない場合エラーを返す 568 601 // value[0] = 項目名 value[1] = 判定対象 569 function ZERO_CHECK($value) { 602 function ZERO_CHECK($value) 603 { 570 604 $this->createParam($value); 571 605 if ($this->arrParam[$value[1]] == '0') { … … 577 611 // 入力文字の桁数判定 → 最小桁数<入力文字列<最大桁数 578 612 // value[0] = 項目名 value[1] = 判定対象文字列 value[2] = 最小桁数 value[3] = 最大桁数 579 function NUM_RANGE_CHECK($value) { 613 function NUM_RANGE_CHECK($value) 614 { 580 615 if (isset($this->arrErr[$value[1]])) { 581 616 return; … … 592 627 // 入力文字の桁数判定 → 入力文字列 = 桁数 以外はNGの場合 593 628 // value[0] = 項目名 value[1] = 判定対象文字列 value[2] = 桁数 594 function NUM_COUNT_CHECK($value) { 629 function NUM_COUNT_CHECK($value) 630 { 595 631 if (isset($this->arrErr[$value[1]])) { 596 632 return; … … 611 647 * @return void 612 648 */ 613 function EMAIL_CHECK($value) { 649 function EMAIL_CHECK($value) 650 { 614 651 if (isset($this->arrErr[$value[1]])) { 615 652 return; … … 660 697 // メールアドレスに使用する文字を正規表現で判定する 661 698 // value[0] = 項目名 value[1] = 判定対象メールアドレス 662 function EMAIL_CHAR_CHECK($value) { 699 function EMAIL_CHAR_CHECK($value) 700 { 663 701 if (isset($this->arrErr[$value[1]])) { 664 702 return; … … 673 711 // URLを正規表現で判定する。デフォルトでhttp://があってもOK 674 712 // value[0] = 項目名 value[1] = 判定対象URL 675 function URL_CHECK($value) { 713 function URL_CHECK($value) 714 { 676 715 if (isset($this->arrErr[$value[1]])) { 677 716 return; … … 684 723 /* IPアドレスの判定 */ 685 724 // value[0] = 項目名 value[1] = 判定対象IPアドレス文字列 686 function IP_CHECK($value) { 725 function IP_CHECK($value) 726 { 687 727 if (isset($this->arrErr[$value[1]])) { 688 728 return; … … 707 747 // 受け取りがない場合エラーを返す 708 748 // value[0] = 項目名 value[1] = 判定対象 value[2]=array(拡張子) 709 function FILE_EXT_CHECK($value) { 749 function FILE_EXT_CHECK($value) 750 { 710 751 if (isset($this->arrErr[$value[1]]) || count($value[2]) == 0) { 711 752 return; … … 733 774 // 受け取りがない場合エラーを返す 734 775 // value[0] = 項目名 value[1] = 判定対象 value[2] = 指定ディレクトリ 735 function FIND_FILE($value) { 776 function FIND_FILE($value) 777 { 736 778 if (isset($this->arrErr[$value[1]])) { 737 779 return; … … 756 798 // 受け取りがない場合エラーを返す 757 799 // value[0] = 項目名 value[1] = 判定対象 value[2] = 指定サイズ(KB) 758 function FILE_EXIST_CHECK($value) { 800 function FILE_EXIST_CHECK($value) 801 { 759 802 if (isset($this->arrErr[$value[1]])) { 760 803 return; … … 769 812 // 受け取りがない場合エラーを返す 770 813 // value[0] = 項目名 value[1] = 判定対象 value[2] = 指定サイズ(KB) 771 function FILE_SIZE_CHECK($value) { 814 function FILE_SIZE_CHECK($value) 815 { 772 816 if (isset($this->arrErr[$value[1]])) { 773 817 return; … … 787 831 // 入力文字が英数字,'_','-'以外ならエラーを返す 788 832 // value[0] = 項目名 value[1] = 判定対象文字列 789 function FILE_NAME_CHECK($value) { 833 function FILE_NAME_CHECK($value) 834 { 790 835 if (isset($this->arrErr[$value[1]])) { 791 836 return; … … 800 845 // 入力文字が英数字,'_','-'以外ならエラーを返す 801 846 // value[0] = 項目名 value[1] = 判定対象文字列 802 function FILE_NAME_CHECK_BY_NOUPLOAD($value) { 847 function FILE_NAME_CHECK_BY_NOUPLOAD($value) 848 { 803 849 if (isset($this->arrErr[$value[1]])) { 804 850 return; … … 815 861 // value[2] = MM 816 862 // value[3] = DD 817 function CHECK_DATE($value) { 863 function CHECK_DATE($value) 864 { 818 865 if (isset($this->arrErr[$value[1]])) { 819 866 return; … … 838 885 // value[4] = HH 839 886 // value[5] = mm 840 function CHECK_DATE2($value) { 887 function CHECK_DATE2($value) 888 { 841 889 if (isset($this->arrErr[$value[1]])) { 842 890 return; … … 858 906 // value[1] = YYYY 859 907 // value[2] = MM 860 function CHECK_DATE3($value) { 908 function CHECK_DATE3($value) 909 { 861 910 if (isset($this->arrErr[$value[1]])) { 862 911 return; … … 879 928 // value[2] = MM 880 929 // value[3] = DD 881 function CHECK_BIRTHDAY($value) { 930 function CHECK_BIRTHDAY($value) 931 { 882 932 if (isset($this->arrErr[$value[1]])) { 883 933 return; … … 886 936 $this->createParam($value); 887 937 // 年が入力されている。 888 if ($this->arrParam[$value[1]] > 0) { 889 938 if (strlen($this->arrParam[$value[1]]) >= 1) { 890 939 // 年の数字チェック、最小数値制限チェック 891 940 $this->doFunc(array($value[0].'(年)', $value[1], BIRTH_YEAR), array('NUM_CHECK', 'MIN_CHECK')); … … 924 973 // value[6] = end_month 925 974 // value[7] = end_day 926 function CHECK_SET_TERM($value) {927 975 function CHECK_SET_TERM($value) 976 { 928 977 // 期間指定 929 978 if (isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[5]])) { 930 979 return; 931 980 } 932 //$this->createParam($value);981 $this->createParam($value); 933 982 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]])) { 934 983 $this->arrErr[$value[2]] = '※ ' . $value[0] . 'を正しく指定してください。<br />'; … … 938 987 } 939 988 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)) { 940 941 989 $date1 = $this->arrParam[$value[2]] .sprintf('%02d', $this->arrParam[$value[3]]) .sprintf('%02d',$this->arrParam[$value[4]]) .'000000'; 942 990 $date2 = $this->arrParam[$value[5]] .sprintf('%02d', $this->arrParam[$value[6]]) .sprintf('%02d',$this->arrParam[$value[7]]) .'235959'; … … 974 1022 975 1023 /*-----------------------------------------------------------------*/ 976 function CHECK_SET_TERM2($value) {977 1024 function CHECK_SET_TERM2($value) 1025 { 978 1026 // 期間指定 979 1027 if (isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[8]])) { 980 1028 return; 981 1029 } 982 //$this->createParam($value);1030 $this->createParam($value); 983 1031 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]])) { 984 1032 $this->arrErr[$value[2]] = '※ ' . $value[0] . 'を正しく指定してください。<br />'; … … 988 1036 } 989 1037 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)) { 990 991 1038 $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]]); 992 1039 $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]]); … … 1017 1064 // value[4] = end_year 1018 1065 // value[5] = end_month 1019 function CHECK_SET_TERM3($value) {1020 1066 function CHECK_SET_TERM3($value) 1067 { 1021 1068 // 期間指定 1022 1069 if (isset($this->arrErr[$value[2]]) || isset($this->arrErr[$value[4]])) { 1023 1070 return; 1024 1071 } 1025 //$this->createParam($value);1072 $this->createParam($value); 1026 1073 if ((strlen($this->arrParam[$value[2]]) > 0 || strlen($this->arrParam[$value[3]]) > 0) && ! checkdate($this->arrParam[$value[3]], 1, $this->arrParam[$value[2]])) { 1027 1074 $this->arrErr[$value[2]] = '※ ' . $value[0] . 'を正しく指定してください。<br />'; … … 1031 1078 } 1032 1079 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))) { 1033 1034 1080 $date1 = $this->arrParam[$value[2]] .sprintf('%02d', $this->arrParam[$value[3]]); 1035 1081 $date2 = $this->arrParam[$value[4]] .sprintf('%02d', $this->arrParam[$value[5]]); … … 1042 1088 1043 1089 //ディレクトリ存在チェック 1044 function DIR_CHECK($value) { 1090 function DIR_CHECK($value) 1091 { 1045 1092 if (isset($this->arrErr[$value[1]])) { 1046 1093 return; … … 1053 1100 1054 1101 // ドメインチェック 1055 function DOMAIN_CHECK($value) { 1102 function DOMAIN_CHECK($value) 1103 { 1056 1104 if (isset($this->arrErr[$value[1]])) { 1057 1105 return; … … 1065 1113 // メールアドレスを正規表現で判定する 1066 1114 // value[0] = 項目名 value[1] = 判定対象メールアドレス 1067 function MOBILE_EMAIL_CHECK($value) { 1115 function MOBILE_EMAIL_CHECK($value) 1116 { 1068 1117 if (isset($this->arrErr[$value[1]])) { 1069 1118 return; … … 1084 1133 * @return void 1085 1134 */ 1086 function CHECK_REGIST_CUSTOMER_EMAIL($value) { 1135 function CHECK_REGIST_CUSTOMER_EMAIL($value) 1136 { 1087 1137 if (isset($this->arrErr[$value[1]])) { 1088 1138 return; … … 1110 1160 * @example $objErr->doFunc(array('URL', 'contents', $arrReviewDenyURL), array('PROHIBITED_STR_CHECK')); 1111 1161 */ 1112 function PROHIBITED_STR_CHECK($value) { 1162 function PROHIBITED_STR_CHECK($value) 1163 { 1113 1164 if (isset($this->arrErr[$value[1]]) || empty($this->arrParam[$value[1]])) { 1114 1165 return; … … 1118 1169 $prohibitedStr = str_replace(array('|', '/'), array('\|', '\/'), $value[2]); 1119 1170 1120 $pattern = '/' . join(' |', $prohibitedStr) . '/i';1121 if (preg_match_all($pattern, $targetStr, $matches = array())) {1171 $pattern = '/' . join('\b|\b', $prohibitedStr) . '\b/i'; 1172 if (preg_match_all($pattern, $targetStr, $matches)) { 1122 1173 $this->arrErr[$value[1]] = '※ ' . $value[0] . 'は入力できません。<br />'; 1123 1174 } … … 1131 1182 * @return void 1132 1183 */ 1133 function EVAL_CHECK($value) { 1184 function EVAL_CHECK($value) 1185 { 1134 1186 if (isset($this->arrErr[$value[0]])) { 1135 1187 return; 1136 1188 } 1137 //$this->createParam($value);1189 $this->createParam($value); 1138 1190 if ($this->evalCheck($value[1]) === false) { 1139 1191 $this->arrErr[$value[0]] = '※ ' . $value[0] . ' の形式が不正です。<br />'; … … 1152 1204 * @return bool パラメーターとして適切な文字列か 1153 1205 */ 1154 function evalCheck($value) { 1206 function evalCheck($value) 1207 { 1155 1208 return @eval('return is_scalar(' . $value . ');'); 1156 1209 } … … 1163 1216 * @return void 1164 1217 */ 1165 function createParam($value) { 1166 foreach ($value as $val_key => $key) { 1167 if ($val_key != 0 && (is_string($key) || is_int($key))) { 1168 if (!is_numeric($key) && preg_match('/^[a-z0-9_]+$/i', $key)) { 1169 if (!isset($this->arrParam[$key])) $this->arrParam[$key] = ''; 1170 if (strlen($this->arrParam[$key]) > 0 1171 && (preg_match('/^[[:alnum:]\-\_]*[\.\/\\\\]*\.\.(\/|\\\\)/',$this->arrParam[$key]) || !preg_match('/\A[^\x00-\x08\x0b\x0c\x0e-\x1f\x7f]+\z/u', $this->arrParam[$key]))) { 1172 $this->arrErr[$value[1]] = '※ ' . $value[0] . 'に禁止された記号の並びまたは制御文字が入っています。<br />'; 1173 } 1174 } else if (preg_match('/[^a-z0-9_]/i', $key)) { 1175 trigger_error('', E_USER_ERROR); 1176 } 1177 } 1178 } 1218 function createParam($value) 1219 { 1220 foreach ($value as $key) { 1221 if (is_string($key) || is_int($key)) { 1222 if (!isset($this->arrParam[$key])) $this->arrParam[$key] = ''; 1223 } 1224 } 1179 1225 } 1180 1226 … … 1186 1232 * @return boolean 値が10進数の数値表現のみの場合 true 1187 1233 */ 1188 function numelicCheck($string) { 1234 function numelicCheck($string) 1235 { 1189 1236 /* 1190 1237 * XXX 10進数の数値表現か否かを調べたいだけだが, … … 1193 1240 */ 1194 1241 $string = (string) $string; 1242 1195 1243 return strlen($string) > 0 && !ctype_digit($string); 1196 1244 }
Note: See TracChangeset
for help on using the changeset viewer.