質問編集履歴

4

タイトル修正

2019/12/29 20:27

投稿

LeCreuset
LeCreuset

スコア15

test CHANGED
@@ -1 +1 @@
1
- 文字列と配列の一致を検証したいが、ループの過程で上書きされりなどの問題がクリアできな
1
+ URLリストを一致した条件ごとに分けたい
test CHANGED
File without changes

3

内容の整理

2019/12/29 20:27

投稿

LeCreuset
LeCreuset

スコア15

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  jQueryの`each`を用い、URLを検証するシステムを作っています。
4
4
 
5
- 例えば以下つが検証対象となるURLだとします。
5
+ 例えば以下`input_url_arr`の5のURLが検証対象となるURLだとします。
6
6
 
7
7
  ```js
8
8
 
@@ -12,11 +12,11 @@
12
12
 
13
13
  'https://goo gle.com/xxx/1',
14
14
 
15
- 'https://google.com/zh/2',
15
+ 'https://google.com/jp/2',
16
-
16
+
17
- 'https://google.com/en/3',
17
+ 'https://google.com/jp/3',
18
-
18
+
19
- 'https://yahoo.com/ru/1'
19
+ 'https://yahoo.com/jp/1'
20
20
 
21
21
  ];
22
22
 
@@ -68,7 +68,7 @@
68
68
 
69
69
  'https://yahoo.com/jp/0',
70
70
 
71
- 'https://yahoo.com/ru/1'
71
+ 'https://yahoo.com/jp/1'
72
72
 
73
73
  ],
74
74
 
@@ -76,9 +76,9 @@
76
76
 
77
77
  [
78
78
 
79
- 'https://google.com/zh/2',
79
+ 'https://google.com/jp/2',
80
-
80
+
81
- 'https://google.com/en/3'
81
+ 'https://google.com/jp/3'
82
82
 
83
83
  ]
84
84
 
@@ -90,11 +90,11 @@
90
90
 
91
91
  ### 発生している問題
92
92
 
93
- `'https://goo gle.com/xxx/1'`は`xxx`の部分が`[a-z]{2}`に不一致であり、さらにスペースもあるという理由によって`error_arr`に入れたいのですが、これが入りません。
93
+ `'https://goo gle.com/xxx/1'`は`xxx`の部分が`[a-z]{2}`に不一致であり、さらにスペースもあるという理由によってエラーとし、上記のように`error_arr`に入れたいのですが、これが入りません。
94
-
95
-
96
-
94
+
95
+
96
+
97
- そして他の4つ上記のようにサービス名の配列に入れたいのですが、これも入りません。
97
+ そして他の4つは正規表現の条件をクリアしているので、上記のようにサービス名の配列に入れたいのですが、これも入りません。
98
98
 
99
99
 
100
100
 
@@ -102,7 +102,7 @@
102
102
 
103
103
 
104
104
 
105
- [下記を実行するjsfiddle](https://jsfiddle.net/hosjqvLg/)
105
+ [下記を実行するjsfiddle](https://jsfiddle.net/q9smunkv/)
106
106
 
107
107
  ```js
108
108
 
@@ -112,11 +112,11 @@
112
112
 
113
113
  'https://goo gle.com/xxx/1',
114
114
 
115
- 'https://google.com/zh/2',
115
+ 'https://google.com/jp/2',
116
-
116
+
117
- 'https://google.com/en/3',
117
+ 'https://google.com/jp/3',
118
-
118
+
119
- 'https://yahoo.com/ru/1'
119
+ 'https://yahoo.com/jp/1'
120
120
 
121
121
  ];
122
122
 
@@ -288,7 +288,7 @@
288
288
 
289
289
 
290
290
 
291
- 問題➁に関してですが、おそらくjsfiddleの55行目の
291
+ おそらくjsfiddleの43行目の
292
292
 
293
293
  result[supplier] = [];
294
294
 
@@ -380,8 +380,6 @@
380
380
 
381
381
  ```
382
382
 
383
-
384
-
385
- 2つの問題についての対策や修正方法についてアドバイス頂けましたら幸いです。
383
+ 先に挙げました2つの問題についての対策や修正方法についてアドバイス頂けましたら幸いです。
386
384
 
387
385
  どうぞ宜しくお願い致します。

2

内容整理

2019/12/29 20:22

投稿

LeCreuset
LeCreuset

スコア15

test CHANGED
File without changes
test CHANGED
@@ -1,8 +1,8 @@
1
1
  ### 前提
2
2
 
3
- jQueryのeachを用い、URLを検証するシステムを作っています。
3
+ jQueryの`each`を用い、URLを検証するシステムを作っています。
4
-
4
+
5
- 以下が検証対象となるURLす。
5
+ 例えば以下5つが検証対象となるURLだとします。
6
6
 
7
7
  ```js
8
8
 
@@ -10,7 +10,7 @@
10
10
 
11
11
  'https://yahoo.com/jp/0',
12
12
 
13
- 'https://google.com/xxx/1',
13
+ 'https://goo gle.com/xxx/1',
14
14
 
15
15
  'https://google.com/zh/2',
16
16
 
@@ -26,11 +26,11 @@
26
26
 
27
27
 
28
28
 
29
- 上記 input_url_arr 下記 result のようにしたいです。
29
+ 上記`input_url_arr`を下記のように整理したいです。
30
-
31
-
32
-
30
+
31
+
32
+
33
- 経緯としましては、「どのURLがどのサービスに属すかを示したい」ということと、そして「もしどこにも属さないURLがあればそのURLはどんな理由によって属さないのかを示したい」ということになります。
33
+ 「どのURLがどのサービスに属すかを示したい」ということと、そして「もしどこにも属さないURLがあればそのURLはどんな理由によって属さないのかを示したい」というのが目的です。
34
34
 
35
35
 
36
36
 
@@ -40,9 +40,21 @@
40
40
 
41
41
  // もしどこにも属さないURLがあればそのURLはどんな理由によって属さないのかを示したい
42
42
 
43
- error_arr: [
43
+ error_arr:
44
+
44
-
45
+ [
46
+
45
- { "https://google.com/xxx/1": ["valided_pattarn is not valid."] }
47
+ { "https://goo gle.com/xxx/1":
48
+
49
+ [
50
+
51
+ "valided_pattarn is not valid.", // xxxが正規表現と不一致という理由でエラー
52
+
53
+ "space is not valid." // スペースがあるという理由でエラー
54
+
55
+ ]
56
+
57
+ }
46
58
 
47
59
  ],
48
60
 
@@ -50,7 +62,9 @@
50
62
 
51
63
  // どのURLがどのサービスに属すかを示したい
52
64
 
53
- yahoo: [
65
+ yahoo:
66
+
67
+ [
54
68
 
55
69
  'https://yahoo.com/jp/0',
56
70
 
@@ -58,7 +72,9 @@
58
72
 
59
73
  ],
60
74
 
61
- google: [
75
+ google:
76
+
77
+ [
62
78
 
63
79
  'https://google.com/zh/2',
64
80
 
@@ -74,37 +90,19 @@
74
90
 
75
91
  ### 発生している問題
76
92
 
77
- 上記のようにしたいのですが、
78
-
79
-
80
-
81
- 問題➀ error_arrの配列何もらな
93
+ `'https://goo gle.com/xxx/1'`は`xxx`の部分が`[a-z]{2}`に不一致であり、さらにスペースもあるという理由によって`error_arr`に入れたのですが、これが入りません。
82
-
94
+
95
+
96
+
83
- 問題➁ yahooやgoogleの配列にはurl1つしからない
97
+ そして他4つも上記のようにサービス名の配列に入れたいのです、これもりません。
84
-
85
-
86
-
87
- という問題が現状でございます。
88
-
89
-
90
98
 
91
99
 
92
100
 
93
101
  ### 該当のソースコード
94
102
 
95
- 検証対象となる input_url_arr に5つのURLがあります。
103
+
96
-
97
-
98
-
99
- このうち「'https://google.com/xxx/1'」は「xxx」の部分が条件「[a-z]{2}」に不一致なため error_arr に入れたいのですが、問題➀のように入りません。
104
+
100
-
101
-
102
-
103
- そして他に4つあるうち、googleの方は「/3」のURLしか入らず、yahooの方は「/1」のURLしか入らないというのが問題➁です。
104
-
105
-
106
-
107
- [下記を実行するjsfiddle](https://jsfiddle.net/0nptkeoy/)
105
+ [下記を実行するjsfiddle](https://jsfiddle.net/hosjqvLg/)
108
106
 
109
107
  ```js
110
108
 
@@ -112,7 +110,7 @@
112
110
 
113
111
  'https://yahoo.com/jp/0',
114
112
 
115
- 'https://google.com/xxx/1',
113
+ 'https://goo gle.com/xxx/1',
116
114
 
117
115
  'https://google.com/zh/2',
118
116
 
@@ -138,7 +136,7 @@
138
136
 
139
137
  'https://yahoo.com/[a-z]{2}/[0-9]{2}',
140
138
 
141
- 'https://yahoo.com/[a-z]{2}/[0-9]{2}',
139
+ // 他にもいくつかある
142
140
 
143
141
  ];
144
142
 
@@ -150,7 +148,7 @@
150
148
 
151
149
  'https://google.com/[a-z]{2}/[0-9]{2}',
152
150
 
153
- 'https://google.com/[a-z]{2}/[0-9]{2}',
151
+ // 他にもいくつかある
154
152
 
155
153
  ];
156
154
 
@@ -170,31 +168,7 @@
170
168
 
171
169
  // 結果
172
170
 
173
- let result = {
171
+ let result = {};
174
-
175
- /*
176
-
177
- 目的のオブジェクト
178
-
179
- error_arr: [
180
-
181
- { url: ['エラーA','エラーB'] },
182
-
183
- { url: ['エラーA'] }
184
-
185
- ],
186
-
187
- [supplier]: [
188
-
189
- 'url',
190
-
191
- 'url'
192
-
193
- ]
194
-
195
- */
196
-
197
- };
198
172
 
199
173
 
200
174
 

1

内容の整理

2019/12/29 20:16

投稿

LeCreuset
LeCreuset

スコア15

test CHANGED
File without changes
test CHANGED
@@ -1,15 +1,175 @@
1
- ### 前提・実現したいこと
1
+ ### 前提
2
-
3
-
4
-
2
+
5
- jQueryのeachを用い、文字列と配列の一致を検証するシステムを作っています。
3
+ jQueryのeachを用い、URLを検証するシステムを作っています。
6
-
7
-
8
-
4
+
9
- 最終的に以下の目的のオブジェクトのようにしたいのですが、問題が生じたために質問させて頂きました
5
+ 以下が検証対象となるURLです。
10
6
 
11
7
  ```js
12
8
 
9
+ const input_url_arr = [
10
+
11
+ 'https://yahoo.com/jp/0',
12
+
13
+ 'https://google.com/xxx/1',
14
+
15
+ 'https://google.com/zh/2',
16
+
17
+ 'https://google.com/en/3',
18
+
19
+ 'https://yahoo.com/ru/1'
20
+
21
+ ];
22
+
23
+ ```
24
+
25
+ ###実現したいこと
26
+
27
+
28
+
29
+ 上記 input_url_arr を 下記 result のようにしたいです。
30
+
31
+
32
+
33
+ 経緯としましては、「どのURLがどのサービスに属すかを示したい」ということと、そして「もしどこにも属さないURLがあればそのURLはどんな理由によって属さないのかを示したい」ということになります。
34
+
35
+
36
+
37
+ ```js
38
+
39
+ {
40
+
41
+ // もしどこにも属さないURLがあればそのURLはどんな理由によって属さないのかを示したい
42
+
43
+ error_arr: [
44
+
45
+ { "https://google.com/xxx/1": ["valided_pattarn is not valid."] }
46
+
47
+ ],
48
+
49
+
50
+
51
+ // どのURLがどのサービスに属すかを示したい
52
+
53
+ yahoo: [
54
+
55
+ 'https://yahoo.com/jp/0',
56
+
57
+ 'https://yahoo.com/ru/1'
58
+
59
+ ],
60
+
61
+ google: [
62
+
63
+ 'https://google.com/zh/2',
64
+
65
+ 'https://google.com/en/3'
66
+
67
+ ]
68
+
69
+ }
70
+
71
+ ```
72
+
73
+
74
+
75
+ ### 発生している問題
76
+
77
+ 上記のようにしたいのですが、
78
+
79
+
80
+
81
+ 問題➀ error_arrの配列に何も入らない
82
+
83
+ 問題➁ yahooやgoogleの配列にはurlが1つしか入らない
84
+
85
+
86
+
87
+ という問題が現状でございます。
88
+
89
+
90
+
91
+
92
+
93
+ ### 該当のソースコード
94
+
95
+ 検証対象となる input_url_arr に5つのURLがあります。
96
+
97
+
98
+
99
+ このうち「'https://google.com/xxx/1'」は「xxx」の部分が条件「[a-z]{2}」に不一致なため error_arr に入れたいのですが、問題➀のように入りません。
100
+
101
+
102
+
103
+ そして他に4つあるうち、googleの方は「/3」のURLしか入らず、yahooの方は「/1」のURLしか入らないというのが問題➁です。
104
+
105
+
106
+
107
+ [下記を実行するjsfiddle](https://jsfiddle.net/0nptkeoy/)
108
+
109
+ ```js
110
+
111
+ const input_url_arr = [
112
+
113
+ 'https://yahoo.com/jp/0',
114
+
115
+ 'https://google.com/xxx/1',
116
+
117
+ 'https://google.com/zh/2',
118
+
119
+ 'https://google.com/en/3',
120
+
121
+ 'https://yahoo.com/ru/1'
122
+
123
+ ];
124
+
125
+ const result = valid_supplier_url( input_url_arr )
126
+
127
+ console.log( result );
128
+
129
+
130
+
131
+ function valid_supplier_url( input_url_arr ){
132
+
133
+
134
+
135
+ // yahooのパターン
136
+
137
+ const pattern_yahoo = [
138
+
139
+ 'https://yahoo.com/[a-z]{2}/[0-9]{2}',
140
+
141
+ 'https://yahoo.com/[a-z]{2}/[0-9]{2}',
142
+
143
+ ];
144
+
145
+
146
+
147
+ // googleのパターン
148
+
149
+ const pattern_google = [
150
+
151
+ 'https://google.com/[a-z]{2}/[0-9]{2}',
152
+
153
+ 'https://google.com/[a-z]{2}/[0-9]{2}',
154
+
155
+ ];
156
+
157
+
158
+
159
+ // ホワイトリスト
160
+
161
+ const white_list = {
162
+
163
+ yahoo : pattern_yahoo,
164
+
165
+ google: pattern_google
166
+
167
+ };
168
+
169
+
170
+
171
+ // 結果
172
+
13
173
  let result = {
14
174
 
15
175
  /*
@@ -36,146 +196,150 @@
36
196
 
37
197
  };
38
198
 
199
+
200
+
201
+ // 引数の input_url_arr を検証
202
+
203
+ let valided_pattarn;
204
+
205
+ $.each( input_url_arr, function( i, input_url ) {
206
+
207
+
208
+
209
+ // ホワイトリストとの検証
210
+
211
+ $.each( white_list, function( supplier, patterns ) {
212
+
213
+ $.each(patterns, function( i, pattern ) {
214
+
215
+ console.log( 'input_url「'+input_url+'」' );
216
+
217
+ if ( input_url.match(pattern) ) {
218
+
219
+ result[supplier] = [];
220
+
221
+ result[supplier].push( input_url );
222
+
223
+ valided_pattarn = true;
224
+
225
+ return false;
226
+
227
+ }
228
+
229
+ });
230
+
231
+ });
232
+
233
+
234
+
235
+ // 基本URLパターンの検証
236
+
237
+ const common_url = new RegExp(
238
+
239
+ '^(https?:\/\/)?'+ // protocol
240
+
241
+ '((([a-z\d]([a-z\d-]*[a-z\d])*)\.)+[a-z]{2,}|'+ // domain name
242
+
243
+ '((\d{1,3}\.){3}\d{1,3}))'+ // OR ip (v4) address
244
+
245
+ '(\:\d+)?(\/[-a-z\d%_.~+]*)*'+ // port and path
246
+
247
+ '(\?[;&a-z\d%_.~+=-]*)?'+ // query string
248
+
249
+ '(\#[-a-z\d_]*)?$','i' // fragment locator
250
+
251
+ );
252
+
253
+ const valided_common = input_url.match( common_url );
254
+
255
+
256
+
257
+ // エラー内容を入れる
258
+
259
+ if ( valided_pattarn && valided_common ) {
260
+
261
+ // ホワイトリストとの検証もtrueで、基本URLパターンの検証もtrueなのでこの場合はエラーなし
262
+
263
+ }
264
+
265
+ else{
266
+
267
+ if ( input_url.slice(0,4) !== 'http' ){
268
+
269
+ result['error_arr'] = { [input_url]: 'http is not valid.' };
270
+
271
+ }
272
+
273
+ if ( input_url.match(/,/) ) {
274
+
275
+ result['error_arr'] = { [input_url]: 'comma is not valid.' };
276
+
277
+ }
278
+
279
+ if ( input_url.match(/ /) || input_url.match(/ /) ) {
280
+
281
+ result['error_arr'] = { [input_url]: 'space is not valid.' };
282
+
283
+ }
284
+
285
+ if ( ! valided_pattarn ){
286
+
287
+ result['error_arr'] = { [input_url]: 'valided_pattarn is not valid.' };
288
+
289
+ }
290
+
291
+ if ( ! valided_common ) {
292
+
293
+ result['error_arr'] = { [input_url]: 'common_url is not valid.' };
294
+
295
+ }
296
+
297
+ }
298
+
299
+
300
+
301
+ });
302
+
303
+
304
+
305
+ return result;
306
+
307
+ }
308
+
39
309
  ```
40
310
 
41
311
 
42
312
 
43
- ### 発生ている問題
313
+ ### たこと
44
-
45
- 検証対象はURLで、正規表現との一致を見ます。
314
+
46
-
315
+
316
+
47
- して上記の目的のオブジェクトにその結果を入れたいのですが、
317
+ 問題➁に関してですが、おそらくjsfiddleの55行目の
48
-
49
-
50
-
318
+
51
- 問題➀ error_arrの配列に何も入らない
319
+ result[supplier] = [];
320
+
52
-
321
+ によって、ホワイトリストとの一致が毎回リセットされてしまうために生じるのではないかと推察しました。
322
+
323
+
324
+
325
+ そこで新たにmatchedという配列を宣言し、次のように修正を試みました。
326
+
327
+
328
+
329
+ このmatchedを改めて
330
+
53
- 問題➁ [supplier]の配列にはurlが1つしか入らない
331
+ result[supplier] = matched;
332
+
54
-
333
+ で追加するという流れにしてみたのですが、これでも実現できず・・・
55
-
56
-
334
+
335
+
336
+
57
- という問題が現状ございます。
337
+ といったよな考察をするレベルです。
58
-
59
-
60
-
61
-
62
-
63
- ### 該当のソースコード
338
+
64
-
65
- まず検証対象となる input_url_arr に5つのURLがあります。
339
+
66
-
67
-
68
-
69
- このうち「'https://google.com/xxx/1'」は「xxx」の部分が条件「[a-z]{2}」に不一致なため error_arr に入れたいのですが、問題➀のように入りません。
70
-
71
-
72
-
73
- そして他に4つあるうち、googleの方は「/3」のURLしか入らず、yahooの方は「/1」のURLしか入らないというのが問題➁です。
74
-
75
-
76
-
77
- [下記を実行するjsfiddle](https://jsfiddle.net/0nptkeoy/)
78
340
 
79
341
  ```js
80
342
 
81
- const input_url_arr = [
82
-
83
- 'https://yahoo.com/jp/0', // 入らない
84
-
85
- 'https://google.com/xxx/1', // error_arrに入らない
86
-
87
- 'https://google.com/zh/2', // 入らない
88
-
89
- 'https://google.com/en/3', // 入る
90
-
91
- 'https://yahoo.com/ru/1' // 入る
92
-
93
- ];
94
-
95
- const result = valid_supplier_url( input_url_arr )
96
-
97
- console.log( result );
98
-
99
-
100
-
101
- function valid_supplier_url( input_url_arr ){
102
-
103
-
104
-
105
- // yahooのパターン
106
-
107
- const pattern_yahoo = [
108
-
109
- 'https://yahoo.com/[a-z]{2}/[0-9]{2}',
110
-
111
- 'https://yahoo.com/[a-z]{2}/[0-9]{2}',
112
-
113
- ];
114
-
115
-
116
-
117
- // googleのパターン
118
-
119
- const pattern_google = [
120
-
121
- 'https://google.com/[a-z]{2}/[0-9]{2}',
122
-
123
- 'https://google.com/[a-z]{2}/[0-9]{2}',
124
-
125
- ];
126
-
127
-
128
-
129
- // ホワイトリスト
130
-
131
- const white_list = {
132
-
133
- yahoo : pattern_yahoo,
134
-
135
- google: pattern_google
136
-
137
- };
138
-
139
-
140
-
141
- // 結果
142
-
143
- let result = {
144
-
145
- /*
146
-
147
- 目的のオブジェクト
148
-
149
- error_arr: [
150
-
151
- { url: ['エラーA','エラーB'] },
152
-
153
- { url: ['エラーA'] }
154
-
155
- ],
156
-
157
- [supplier]: [
158
-
159
- 'url',
160
-
161
- 'url'
162
-
163
- ]
164
-
165
- */
166
-
167
- };
168
-
169
-
170
-
171
- // 引数の input_url_arr を検証
172
-
173
- let valided_pattarn;
174
-
175
- $.each( input_url_arr, function( i, input_url ) {
176
-
177
-
178
-
179
343
  // ホワイトリストとの検証
180
344
 
181
345
  $.each( white_list, function( supplier, patterns ) {
@@ -202,230 +366,48 @@
202
366
 
203
367
 
204
368
 
205
- // 基本URLパターンの検証
206
-
207
- const common_url = new RegExp(
208
-
209
- '^(https?:\/\/)?'+ // protocol
210
-
211
- '((([a-z\d]([a-z\d-]*[a-z\d])*)\.)+[a-z]{2,}|'+ // domain name
212
-
213
- '((\d{1,3}\.){3}\d{1,3}))'+ // OR ip (v4) address
214
-
215
- '(\:\d+)?(\/[-a-z\d%_.~+]*)*'+ // port and path
216
-
217
- '(\?[;&a-z\d%_.~+=-]*)?'+ // query string
218
-
219
- '(\#[-a-z\d_]*)?$','i' // fragment locator
220
-
221
- );
222
-
223
- const valided_common = input_url.match( common_url );
224
-
225
-
226
-
227
- // エラー内容を入れる
228
-
229
- if ( valided_pattarn && valided_common ) {
230
-
231
- // ホワイトリストとの検証もtrueで、基本URLパターンの検証もtrueなのでこの場合はエラーなし
232
-
233
- }
234
-
235
- else{
236
-
237
- if ( input_url.slice(0,4) !== 'http' ){
238
-
239
- result['error_arr'] = { [input_url]: 'http is not valid.' };
240
-
241
- }
242
-
243
- if ( input_url.match(/,/) ) {
244
-
245
- result['error_arr'] = { [input_url]: 'comma is not valid.' };
246
-
247
- }
248
-
249
- if ( input_url.match(/ /) || input_url.match(/ /) ) {
250
-
251
- result['error_arr'] = { [input_url]: 'space is not valid.' };
252
-
253
- }
254
-
255
- if ( ! valided_pattarn ){
256
-
257
- result['error_arr'] = { [input_url]: 'valided_pattarn is not valid.' };
258
-
259
- }
260
-
261
- if ( ! valided_common ) {
262
-
263
- result['error_arr'] = { [input_url]: 'common_url is not valid.' };
264
-
265
- }
266
-
267
- }
268
-
269
-
270
-
271
- });
272
-
273
-
274
-
275
- return result;
276
-
277
- }
369
+ /*** ↓修正 ****/
370
+
371
+
372
+
373
+ // ホワイトリストとの検証
374
+
375
+ $.each( white_list, function( supplier, patterns ) {
376
+
377
+ let matched = []; /*** ←追加 ****/
378
+
379
+ $.each(patterns, function( i, pattern ) {
380
+
381
+ console.log( 'input_url「'+input_url+'」' );
382
+
383
+ if ( input_url.match(pattern) ) {
384
+
385
+ //result[supplier] = []; /*** ←削除 ****/
386
+
387
+ //result[supplier].push( input_url ); /*** ←削除 ****/
388
+
389
+ matched.push( input_url ); /*** ←追加 ****/
390
+
391
+ valided_pattarn = true;
392
+
393
+ return false;
394
+
395
+ }
396
+
397
+ });
398
+
399
+ result[supplier] = matched;/*** ←追加 ****/
400
+
401
+ });
402
+
403
+
404
+
405
+
278
406
 
279
407
  ```
280
408
 
281
409
 
282
410
 
283
- ### 試したこと
284
-
285
-
286
-
287
- 問題➁に関してですが、おそらくjsfiddleの55行目の
288
-
289
- result[supplier] = [];
290
-
291
- によって、ホワイトリストとの一致が毎回リセットされてしまうために生じるのではないかと推察しました。
292
-
293
-
294
-
295
- そこで新たにmatchedという配列を宣言し、次のように修正を試みました。
296
-
297
-
298
-
299
- このmatchedを改めて
300
-
301
- result[supplier] = matched;
302
-
303
- で追加するという流れにしてみたのですが、これでも実現できず・・・
304
-
305
-
306
-
307
- といったような考察をするレベルです。
308
-
309
-
310
-
311
- ```js
312
-
313
- // ホワイトリストとの検証
314
-
315
- $.each( white_list, function( supplier, patterns ) {
316
-
317
- $.each(patterns, function( i, pattern ) {
318
-
319
- console.log( 'input_url「'+input_url+'」' );
320
-
321
- if ( input_url.match(pattern) ) {
322
-
323
- result[supplier] = [];
324
-
325
- result[supplier].push( input_url );
326
-
327
- valided_pattarn = true;
328
-
329
- return false;
330
-
331
- }
332
-
333
- });
334
-
335
- });
336
-
337
-
338
-
339
- /*** ↓修正 ****/
340
-
341
-
342
-
343
- // ホワイトリストとの検証
344
-
345
- $.each( white_list, function( supplier, patterns ) {
346
-
347
- let matched = []; /*** ←追加 ****/
348
-
349
- $.each(patterns, function( i, pattern ) {
350
-
351
- console.log( 'input_url「'+input_url+'」' );
352
-
353
- if ( input_url.match(pattern) ) {
354
-
355
- //result[supplier] = []; /*** ←削除 ****/
356
-
357
- //result[supplier].push( input_url ); /*** ←削除 ****/
358
-
359
- matched.push( input_url ); /*** ←追加 ****/
360
-
361
- valided_pattarn = true;
362
-
363
- return false;
364
-
365
- }
366
-
367
- });
368
-
369
- result[supplier] = matched;/*** ←追加 ****/
370
-
371
- });
372
-
373
-
374
-
375
-
376
-
377
- ```
378
-
379
-
380
-
381
- ### 補足情報
382
-
383
-
384
-
385
- 尚、先の input_url_arr の場合、目的のオブジェクトは次のものを考えています。
386
-
387
-
388
-
389
- 経緯としましては、「どのURLがどのサービスに属すかを示したい」ということと、そして「もしどこにも属さないURLがあればそのURLはどんな理由によって属さないのかを示したい」ということから、このようなオブジェクトを考えた次第です。
390
-
391
-
392
-
393
- ```js
394
-
395
- {
396
-
397
- // もしどこにも属さないURLがあればそのURLはどんな理由によって属さないのかを示したい
398
-
399
- error_arr: [
400
-
401
- { "https://yahoo.com/ru/1": ["valided_pattarn is not valid."] }
402
-
403
- ],
404
-
405
-
406
-
407
- // どのURLがどのサービスに属すかを示したい
408
-
409
- yahoo: [
410
-
411
- 'https://yahoo.com/jp/0',
412
-
413
- 'https://yahoo.com/ru/1'
414
-
415
- ],
416
-
417
- google: [
418
-
419
- 'https://google.com/zh/2',
420
-
421
- 'https://google.com/en/3'
422
-
423
- ]
424
-
425
- }
426
-
427
- ```
428
-
429
411
  2つの問題についての対策や修正方法についてアドバイス頂けましたら幸いです。
430
412
 
431
413
  どうぞ宜しくお願い致します。