回答編集履歴

4

調整

2018/03/09 02:48

投稿

m.ts10806
m.ts10806

スコア80765

test CHANGED
@@ -138,7 +138,7 @@
138
138
 
139
139
  case "max":
140
140
 
141
- if($this->max_check($value),$rule_setting){
141
+ if($this->max_check($value,$rule_setting){
142
142
 
143
143
  $result[$control_name][] = $info["name"].'は'.$rule_setting.'文字以内で入力してください。';
144
144
 
@@ -202,6 +202,12 @@
202
202
 
203
203
 
204
204
 
205
+ エラーメッセージなども設定で持ってそこから取得するようにすればswitchすらも不要にできる可能性があります(そこは発想とやり方次第ですね)
206
+
207
+ いずれにしてもバリデーションルールが増えればメソッドも増えます。
208
+
209
+
210
+
205
211
  追記:
206
212
 
207
213
  [filter_var()](http://php.net/manual/ja/function.filter-var.php)という関数があるのでこちらを使うとメールアドレスのチェックなどはかなり楽です(自身のチェックしたい内容全て網羅しているとは限りませんが・・・)

3

追記

2018/03/09 02:48

投稿

m.ts10806
m.ts10806

スコア80765

test CHANGED
@@ -199,3 +199,9 @@
199
199
 
200
200
 
201
201
  パスワードとかは入力必須ではないということはないと思いますので、そういう場合は「パスワードチェック」に空かどうかも含ませるというのもありです。
202
+
203
+
204
+
205
+ 追記:
206
+
207
+ [filter_var()](http://php.net/manual/ja/function.filter-var.php)という関数があるのでこちらを使うとメールアドレスのチェックなどはかなり楽です(自身のチェックしたい内容全て網羅しているとは限りませんが・・・)

2

修正

2018/03/09 02:45

投稿

m.ts10806
m.ts10806

スコア80765

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- ※ざっと作ったので動作検証ほとんどできませんが・・・。
19
+ ※ざっと作ったので動作検証ほとんどできませんが・・・。
20
20
 
21
21
 
22
22
 
@@ -24,6 +24,8 @@
24
24
 
25
25
  ```php
26
26
 
27
+ require_once('./validation.php');
28
+
27
29
 
28
30
 
29
31
  //対象コントロール→バリデーションルール
@@ -84,35 +86,47 @@
84
86
 
85
87
 
86
88
 
87
- バリデーション
89
+ バリデーション(validation.php)
88
90
 
89
91
  ```php
90
92
 
93
+
94
+
95
+ //バリデーションクラス
96
+
91
97
  class Validation{
92
98
 
99
+ //コンストラクタ
100
+
93
101
  function Validation($input_control = [],$input_data = []){
94
102
 
95
- $result = [];
103
+ $result = [];//チェック結果配列
96
104
 
97
105
  foreach($input_control as $control_name=>$info){
98
106
 
107
+ //入力情報が存在するか
108
+
99
109
  if(array_key_exists($control_name,$input_data)){
100
110
 
111
+ $value = $input_data[$control_name];
112
+
101
- $rules = explode("|",$info["rule"]);
113
+ $rules = explode("|",$info["rule"]);//バリデーションルールの引き出し
102
-
114
+
103
- foreach($rules as $r){
115
+ foreach($rules as $r){ //指定されたルールをループ
104
-
116
+
105
- $rule = explode("-",$r);
117
+ $rule = explode("-",$r); //ルール設定の切り出し
106
-
118
+
107
- $rule_name = $rule[0];
119
+ $rule_name = $rule[0]; //ルール名
108
-
120
+
109
- $rule_setting = $rule[1];
121
+ $rule_setting = $rule[1]; //ルール設定
110
122
 
111
123
  switch($rule_name){
112
124
 
125
+ //入力空の場合
126
+
113
127
  case "empty":
114
128
 
115
- if($this->empty_check($input_data[$control_name])){
129
+ if($this->empty_check($value)){
116
130
 
117
131
  $result[$control_name][] = $info["name"].'を入力してください。';
118
132
 
@@ -120,9 +134,11 @@
120
134
 
121
135
  break;
122
136
 
137
+ //最大文字数のチェック
138
+
123
139
  case "max":
124
140
 
125
- if($this->max_check($input_data[$control_name]),$rule_setting){
141
+ if($this->max_check($value),$rule_setting){
126
142
 
127
143
  $result[$control_name][] = $info["name"].'は'.$rule_setting.'文字以内で入力してください。';
128
144
 

1

追記

2018/03/09 02:36

投稿

m.ts10806
m.ts10806

スコア80765

test CHANGED
@@ -8,9 +8,11 @@
8
8
 
9
9
  それぞれのコントロールに対してバリデーションルールをつけてそのルールに基づいてチェックしてはどうでしょうか。
10
10
 
11
+ あとはルールを追加していけばいいだけなので、入力項目個別に作るよりは様々な用途に使えて、メソッド追加も最小限に済むと思います。
11
12
 
12
13
 
14
+
13
- 私ならクラス化します。
15
+ というわけで、私ならクラス化します。
14
16
 
15
17
 
16
18
 
@@ -112,7 +114,7 @@
112
114
 
113
115
  if($this->empty_check($input_data[$control_name])){
114
116
 
115
- $result[$control_name][] = $info["name"]."を入力してください。";
117
+ $result[$control_name][] = $info["name"].'を入力してください。';
116
118
 
117
119
  }
118
120
 
@@ -122,7 +124,7 @@
122
124
 
123
125
  if($this->max_check($input_data[$control_name]),$rule_setting){
124
126
 
125
- $result[$control_name][] = $info["name"]."は文字以内で入力してください";
127
+ $result[$control_name][] = $info["name"].''.$rule_setting.'文字以内で入力してください。';
126
128
 
127
129
  }
128
130
 
@@ -141,6 +143,10 @@
141
143
  }
142
144
 
143
145
  }
146
+
147
+
148
+
149
+ return $result;
144
150
 
145
151
  }
146
152