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

回答編集履歴

1

2015/02/06 02:54

投稿

raou
raou

スコア463

answer CHANGED
@@ -1,7 +1,6 @@
1
1
  以下のようなコードだと大丈夫だと思います。
2
2
 
3
3
  【PHPの場合】
4
- ```lang-php
5
4
  <?php
6
5
  $validation = Array(
7
6
  "field1" => Array(
@@ -14,44 +13,41 @@
14
13
  ....
15
14
  );
16
15
  if($_POST) {
17
- foreach($validation as $key => $value) {
16
+ foreach($validation as $key => $value) {
18
- if(!isset($_POST[$key])){
17
+ if(!isset($_POST[$key])){
19
- if( $value['required']) die("Field ".$key." is required");
18
+ if( $value['required']) die("Field ".$key." is required");
20
- }else{
19
+ }else{
21
- $length = strlen($_POST[$key]);
20
+ $length = strlen($_POST[$key]);
22
- if( $length < $value['minlength']) die("Field ".$key." too short");
21
+ if( $length < $value['minlength']) die("Field ".$key." too short");
23
- if( $length > $value['maxlength']) die("Field ".$key." too long");
22
+ if( $length > $value['maxlength']) die("Field ".$key." too long");
24
- if( !preg_match("(".$value['regex'].")",$_POST[$key])) die("Field ".$key." incorrect format");
23
+ if( !preg_match("(".$value['regex'].")",$_POST[$key])) die("Field ".$key." incorrect format");
25
- }
26
- }
27
24
  }
25
+ }
26
+ }
28
27
  ?>
29
- ```
30
28
 
31
29
  【javascriptの場合】
32
- ```lang-javascript
33
30
  <script type="text/javascript">
34
31
  (function(rules) {
35
- var die = function(str) {alert(str); return false;};
32
+ var die = function(str) {alert(str); return false;};
36
- document.getElementById('FormTest').onsubmit = function() {
33
+ document.getElementById('FormTest').onsubmit = function() {
37
- var elms = this.elements, i, it, r, s;
34
+ var elms = this.elements, i, it, r, s;
38
- for( i in rules) {
35
+ for( i in rules) {
39
- r = rules[i];
36
+ r = rules[i];
40
- it = elms.namedItem(i);
37
+ it = elms.namedItem(i);
41
- if( typeof it == "undefined") {
38
+ if( typeof it == "undefined") {
42
- if( r.required) return die("Field "+i+" is required");
39
+ if( r.required) return die("Field "+i+" is required");
43
- }
40
+ }
44
- else {
41
+ else {
45
- s = it.length;
42
+ s = it.length;
46
- if( s &lt; r.minlength) return die("Field "+i+" too short");
43
+ if( s < r.minlength) return die("Field "+i+" too short");
47
- if( s &gt; r.maxlength) return die("Field "+i+" too short");
44
+ if( s > r.maxlength) return die("Field "+i+" too short");
48
- if( !s.match(new RegExp(r.regex))) return die("Field "+i+" incorrect format");
45
+ if( !s.match(new RegExp(r.regex))) return die("Field "+i+" incorrect format");
49
- }
46
+ }
50
- }
47
+ }
51
- return true;
48
+ return true;
52
- };
49
+ };
53
50
  })(<?=json_encode($validation)?>);
54
51
  </script>
55
- ```
56
52
 
57
- 書いてある通り、規則設定を定義するのが一般的な考えで、そこから **json_encode($validation)** でエスケープ処理され、規則をJavaScript 環境へと通します。まだ検証コードを複製してPHPとJSで走らせる必要がありますが、少なくとも2箇所でコードを変更することなく更に規則を加えられます。
53
+ 書いてある通り、規則設定を定義するのが一般的な考えで、そこから json_encode($validation) でエスケープ処理され、規則をJavaScript 環境へと通します。まだ検証コードを複製してPHPとJSで走らせる必要がありますが、少なくとも2箇所でコードを変更することなく更に規則を加えられます。