質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

3回答

2516閲覧

JS配列に【未定の文字列】を入れて判定する方法

sandwich

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/09/01 22:59

編集2018/09/03 17:21

URL入力フォームのバリデーションにおいて、【未定の文字列】を配列に入れることはできますか?

下記の【未定のXX文字】や【不明な文字数】のイメージでURLのホワイトリストを登録したいのですが、何か良い方法はありませんでしょうか?

パターンは➀から➃まで4つございますが、1つでも構いませんのでご存知でしたらぜひ教えてください。

jQuery

1$(function(){ 2 $('#input').focusout(function() { 3 4 //ホワイトリスト 5 var inputVal = $(this).val(); 6 var whitelist = [ 7 'https://example.com/【未定の8文字】', //パターン➀ 8 'https://example.net/【未定の17文字】/?t=', //パターン➁ 9 'https://example.biz/【不明な文字数】/【未定の10文字】']; //パターン➂ 10 'https://example.xyz/【未定の15文字】/【不明な文字数】']; //パターン➃ 11 var regex = new RegExp(whitelist.join('|')); 12 13 //条件判別 14 if ( !(regex.test(inputVal)) ) { 15 alert('許可されていないURLです。'); 16 } 17 18 }); 19});

※ただし、たとえば【未定の10文字】なら「10文字ちょうど」であって、「10文字以上」ではありません。他の文字数も同様にちょうどが目的です。

難しい条件ですが、宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

バリデーションなのであれば、「URL/URI として使用可能な文字がX文字(or任意数)続く正規表現」を記述する必要があります。
使用可能な文字は関連 RFC を確認してください。

ただ、それ以前にちゃんと正規表現を学習したほうが良いですよ。。。
正規表現

投稿2018/09/04 02:15

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sandwich

2018/09/04 18:16

ありがとうございます。お叱り、ごもっともだと思います。先が長いです…
guest

0

https://example.net/([^/]/)?.{10}で、「不明な文字数と/のペア」がないか、または1回だけ存在するときを許容できます。

--
要件変わったので追記
それぞれこんな感じかと

'https://example.com/[^/]{8}', //パターン➀ 'https://example.net/[^/]{17}/?t=', //パターン➁ 'https://example.biz/[^/]+/.{10}']; //パターン➂ 'https://example.xyz/[^/]{15}/[^/]+']; //パターン➃

一応補足しときますが、質問での未定の文字数っていうのをスラッシュ以外の任意の文字の繰り返し、であって最低でも一文字は必要と解釈してます。

投稿2018/09/03 02:03

編集2018/09/04 01:51
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sandwich

2018/09/03 17:20

パターン➂ですね。「/のペア」まで考えてくださってどうもありがとうございます。 その場合、「【不明な文字数】/【未定の10文字】」となるのですが、「/」はどこに居れればよろしいでしょうか? https://example.net/([^/]/)?.{10}https://example.net/([^/]/)?/.{10} でよろしいでしょうか?
papinianus

2018/09/04 01:52

誤解してたのと、パターン増えたので書き直しました
sandwich

2018/09/04 17:14

突然パターン追加してしまい失礼致しました。それぞれに対応可能なコードをありがとうございます。 >一応補足しときますが はい、お気遣い感謝致します。 [^/] というのは スラッシュ以外 という意味なのですね。 さて、ほぼできてきました。 ただし、YoutubeのURLですが、 この条件が動作せず、 'https://www.youtube.com/watch?v=[^/]{11}', こちらではきちんと動作するのですが、 'http://youtu.be/[^/]{11}', イコールが入っているとできないなどの理由はありますでしょうか?
guest

0

javascript

1$(function(){ 2 $('#input').focusout(function() { 3 4 //ホワイトリスト 5 var inputVal = $(this).val(); 6 var whitelist = ['^https://example.com/.{10}$', 7 '^https://example.net/.{20}$']; 8 var regex = new RegExp(whitelist.join('|')); 9 10 //条件判別 11 if ( !(regex.test(inputVal)) ) { 12 alert('許可されていないURLです。'); 13 } 14 15 }); 16});

正規表現では .{文字数} で文字数を指定できます。


追記1

指摘にありました通り、正規表現は基本的に一部でもマッチすれば、trueなので、前後に余計な文字がついてはいけないのであれば、正規表現の先頭には^、末尾には$をつけてください。


追記2

今のコードでは、/も、文字としてカウントしてしまうので、

javascript

1$(function(){ 2 $('#input').focusout(function() { 3 4 //ホワイトリスト 5 var inputVal = $(this).val(); 6 var whitelist = ['^https://example.com/[^/]{10}$', 7 '^https://example.net/[^/]{20}$']; 8 var regex = new RegExp(whitelist.join('|')); 9 10 //条件判別 11 if ( !(regex.test(inputVal)) ) { 12 alert('許可されていないURLです。'); 13 } 14 15 }); 16});

[^/]での^は、否定(~ではない)の意味です。

投稿2018/09/01 23:31

編集2018/09/05 09:49
_lemon2003_

総合スコア274

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sandwich

2018/09/01 23:35

迅速なご回答に感謝致します。ありがとうございました。
sandwich

2018/09/03 17:17

文字数は「10文字以上」でなく「10文字ちょうど」だとより助かるので、またご存知のことがありましたらぜひ教えてください。
_lemon2003_

2018/09/04 04:18

.{10} は任意の文字( . )を 10 連続という意味なので、それを置き換えたい位置に入れてください。
sandwich

2018/09/04 17:14

ありがとうございます。そのように致します。「ちょうど」は探してもなさそうでしたね。
sandwich

2018/09/04 21:45

reosabloさま、助かりました。どうもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問