質問するログイン新規登録

回答編集履歴

4

調整

2018/03/09 02:48

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -68,7 +68,7 @@
68
68
  break;
69
69
  //最大文字数のチェック
70
70
  case "max":
71
- if($this->max_check($value),$rule_setting){
71
+ if($this->max_check($value,$rule_setting){
72
72
  $result[$control_name][] = $info["name"].'は'.$rule_setting.'文字以内で入力してください。';
73
73
  }
74
74
  break;
@@ -100,5 +100,8 @@
100
100
 
101
101
  パスワードとかは入力必須ではないということはないと思いますので、そういう場合は「パスワードチェック」に空かどうかも含ませるというのもありです。
102
102
 
103
+ エラーメッセージなども設定で持ってそこから取得するようにすればswitchすらも不要にできる可能性があります(そこは発想とやり方次第ですね)
104
+ いずれにしてもバリデーションルールが増えればメソッドも増えます。
105
+
103
106
  追記:
104
107
  [filter_var()](http://php.net/manual/ja/function.filter-var.php)という関数があるのでこちらを使うとメールアドレスのチェックなどはかなり楽です(自身のチェックしたい内容全て網羅しているとは限りませんが・・・)

3

追記

2018/03/09 02:48

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -98,4 +98,7 @@
98
98
  ```
99
99
 
100
100
 
101
- パスワードとかは入力必須ではないということはないと思いますので、そういう場合は「パスワードチェック」に空かどうかも含ませるというのもありです。
101
+ パスワードとかは入力必須ではないということはないと思いますので、そういう場合は「パスワードチェック」に空かどうかも含ませるというのもありです。
102
+
103
+ 追記:
104
+ [filter_var()](http://php.net/manual/ja/function.filter-var.php)という関数があるのでこちらを使うとメールアドレスのチェックなどはかなり楽です(自身のチェックしたい内容全て網羅しているとは限りませんが・・・)

2

修正

2018/03/09 02:45

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -7,10 +7,11 @@
7
7
 
8
8
  というわけで、私ならクラス化します。
9
9
 
10
- ※ざっと作ったので動作検証ほとんどできませんが・・・。
10
+ ※ざっと作ったので動作検証ほとんどできませんが・・・。
11
11
 
12
12
  バリデーション呼び出し側
13
13
  ```php
14
+ require_once('./validation.php');
14
15
 
15
16
  //対象コントロール→バリデーションルール
16
17
  $input_control=[
@@ -41,26 +42,33 @@
41
42
 
42
43
  ```
43
44
 
44
- バリデーション
45
+ バリデーション(validation.php)
45
46
  ```php
47
+
48
+ //バリデーションクラス
46
49
  class Validation{
50
+ //コンストラクタ
47
51
  function Validation($input_control = [],$input_data = []){
48
- $result = [];
52
+ $result = [];//チェック結果配列
49
53
  foreach($input_control as $control_name=>$info){
54
+ //入力情報が存在するか
50
55
  if(array_key_exists($control_name,$input_data)){
56
+ $value = $input_data[$control_name];
51
- $rules = explode("|",$info["rule"]);
57
+ $rules = explode("|",$info["rule"]);//バリデーションルールの引き出し
52
- foreach($rules as $r){
58
+ foreach($rules as $r){ //指定されたルールをループ
53
- $rule = explode("-",$r);
59
+ $rule = explode("-",$r); //ルール設定の切り出し
54
- $rule_name = $rule[0];
60
+ $rule_name = $rule[0]; //ルール名
55
- $rule_setting = $rule[1];
61
+ $rule_setting = $rule[1]; //ルール設定
56
62
  switch($rule_name){
63
+ //入力空の場合
57
64
  case "empty":
58
- if($this->empty_check($input_data[$control_name])){
65
+ if($this->empty_check($value)){
59
66
  $result[$control_name][] = $info["name"].'を入力してください。';
60
67
  }
61
68
  break;
69
+ //最大文字数のチェック
62
70
  case "max":
63
- if($this->max_check($input_data[$control_name]),$rule_setting){
71
+ if($this->max_check($value),$rule_setting){
64
72
  $result[$control_name][] = $info["name"].'は'.$rule_setting.'文字以内で入力してください。';
65
73
  }
66
74
  break;

1

追記

2018/03/09 02:36

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -3,8 +3,9 @@
3
3
  電話番号チェックなどはわけるのではなく1つにできそうです。
4
4
 
5
5
  それぞれのコントロールに対してバリデーションルールをつけてそのルールに基づいてチェックしてはどうでしょうか。
6
+ あとはルールを追加していけばいいだけなので、入力項目個別に作るよりは様々な用途に使えて、メソッド追加も最小限に済むと思います。
6
7
 
7
- 私ならクラス化します。
8
+ というわけで、私ならクラス化します。
8
9
 
9
10
  ※ざっと作ったので動作検証ほとんどできませんが・・・。
10
11
 
@@ -55,12 +56,12 @@
55
56
  switch($rule_name){
56
57
  case "empty":
57
58
  if($this->empty_check($input_data[$control_name])){
58
- $result[$control_name][] = $info["name"]."を入力してください。";
59
+ $result[$control_name][] = $info["name"].'を入力してください。';
59
60
  }
60
61
  break;
61
62
  case "max":
62
63
  if($this->max_check($input_data[$control_name]),$rule_setting){
63
- $result[$control_name][] = $info["name"]."は文字以内で入力してください";
64
+ $result[$control_name][] = $info["name"].''.$rule_setting.'文字以内で入力してください。';
64
65
  }
65
66
  break;
66
67
 
@@ -70,6 +71,8 @@
70
71
  }
71
72
  }
72
73
  }
74
+
75
+ return $result;
73
76
  }
74
77
 
75
78
  //空のチェック