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

回答編集履歴

3

コードブロック : ソース : 正規表現の最適化

2018/09/05 09:49

投稿

_lemon2003_
_lemon2003_

スコア274

answer CHANGED
@@ -22,4 +22,30 @@
22
22
  ---
23
23
 
24
24
  ### 追記1
25
- 指摘にありました通り、正規表現は基本的に一部でもマッチすれば、`true`なので、前後に余計な文字がついてはいけないのであれば、正規表現の先頭には`^`、末尾には`$`をつけてください。
25
+ 指摘にありました通り、正規表現は基本的に一部でもマッチすれば、`true`なので、前後に余計な文字がついてはいけないのであれば、正規表現の先頭には`^`、末尾には`$`をつけてください。
26
+
27
+ ---
28
+
29
+ ### 追記2
30
+ 今のコードでは、`/`も、文字としてカウントしてしまうので、
31
+
32
+ ```javascript
33
+ $(function(){
34
+ $('#input').focusout(function() {
35
+
36
+ //ホワイトリスト
37
+ var inputVal = $(this).val();
38
+ var whitelist = ['^https://example.com/[^/]{10}$',
39
+ '^https://example.net/[^/]{20}$'];
40
+ var regex = new RegExp(whitelist.join('|'));
41
+
42
+ //条件判別
43
+ if ( !(regex.test(inputVal)) ) {
44
+ alert('許可されていないURLです。');
45
+ }
46
+
47
+ });
48
+ });
49
+ ```
50
+
51
+ ※`[^/]`での`^`は、否定(~ではない)の意味です。

2

コードブロック : ソース : 正規表現の最適化

2018/09/05 09:49

投稿

_lemon2003_
_lemon2003_

スコア274

answer CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
  //ホワイトリスト
6
6
  var inputVal = $(this).val();
7
- var whitelist = ['https://example.com/.{10}',
7
+ var whitelist = ['^https://example.com/.{10}$',
8
- 'https://example.net/.{20}'];
8
+ '^https://example.net/.{20}$'];
9
9
  var regex = new RegExp(whitelist.join('|'));
10
10
 
11
11
  //条件判別
@@ -17,4 +17,9 @@
17
17
  });
18
18
  ```
19
19
 
20
- 正規表現では `.{文字数}` で文字数を指定できます。
20
+ 正規表現では `.{文字数}` で文字数を指定できます。
21
+
22
+ ---
23
+
24
+ ### 追記1
25
+ 指摘にありました通り、正規表現は基本的に一部でもマッチすれば、`true`なので、前後に余計な文字がついてはいけないのであれば、正規表現の先頭には`^`、末尾には`$`をつけてください。

1

追記

2018/09/05 09:45

投稿

_lemon2003_
_lemon2003_

スコア274

answer CHANGED
@@ -15,4 +15,6 @@
15
15
 
16
16
  });
17
17
  });
18
- ```
18
+ ```
19
+
20
+ 正規表現では `.{文字数}` で文字数を指定できます。