回答編集履歴
4
調整
answer
CHANGED
@@ -68,7 +68,7 @@
|
|
68
68
|
break;
|
69
69
|
//最大文字数のチェック
|
70
70
|
case "max":
|
71
|
-
if($this->max_check($value
|
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
追記
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
修正
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($
|
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($
|
71
|
+
if($this->max_check($value),$rule_setting){
|
64
72
|
$result[$control_name][] = $info["name"].'は'.$rule_setting.'文字以内で入力してください。';
|
65
73
|
}
|
66
74
|
break;
|
1
追記
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
|
//空のチェック
|