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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

316閲覧

JavaScriptで複数の正規表現判定

yasu0716

総合スコア15

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2019/10/04 14:11

JavaScriptで正規表現をチェックする機能を作りました。
入力が7文字でなかった場合、警告文が表示され、フォームの色が変わるものです。

今回は、複数のフォームに対してそれぞれに対応する正規表現に沿うか判定し、
エラーの場合同じ挙動を示させたいです。

そのためにswitchで分岐させてやろうと思ったのですが、上手くいきません。
switch文のcaseはid名そのままではないのでしょうか・・・??
ちゃんと動くコードを書くにはどこを変えればいいのでしょうか。

また、switch以外に見やすく短い解法はありますでしょうか。

JavaScript

1//以前作ったもの 2function RegEx(id){ 3 var code = document.getElementById(id); 4 var obj2 = document.getElementById('error'); 5 var data = /^\d{7}$/.test(code.value); 6 if(data == false) { 7 obj2.style.opacity = '1'; 8 document.getElementById('zip11').style.backgroundColor = '#eeedb2'; 9 }else{ 10 obj2.style.opacity = '0'; 11 document.getElementById('zip11').style.backgroundColor = '#ffffff'; 12 }; 13 14};

JavaScript

1//今回作っているもの 2function RegEx(id){ 3 var code = document.getElementById(id); 4 var obj2 = document.getElementById('error'); 5 switch( code ){ 6 case 'zip11': 7 var data = /^\d{7}$/.test(code.value); 8 break; 9 case 'tell': 10 var data = /^\d{11}$/.test(code.value); 11 break; 12 } 13 if(data == false) { 14 obj2.style.opacity = '1'; 15 document.getElementById('zip11').style.backgroundColor = '#eeedb2'; 16 }else{ 17 obj2.style.opacity = '0'; 18 document.getElementById('zip11').style.backgroundColor = '#ffffff'; 19 }; 20};

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

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

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

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

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

tanishi_a

2019/10/05 02:44 編集

全体がわからないですが、switch (code) ではなく、switch (id) では?
guest

回答3

0

ベストアンサー


ちゃんと動くコードを書くにはどこを変えればいいのでしょうか。

1個め

JavaScript

1switch (code) {

 ↓

JavaScript

1switch (id) {

2個め

JavaScript

1document.getElementById('zip11').style.backgroundColor = ...

 ↓

JavaScript

1document.getElementById(id).style.backgroundColor = ...

また、switch以外に見やすく短い解法はありますでしょうか。

この場合は、正規表現のパターンを連想配列?に入れておけば、
id ごとに switch で分岐する必要はなくなります。

JavaScript

1var patterns = { 2 zip11: /^\d{7}$/, 3 tel: /^\d{11}$/ 4}; 5var data = patterns[id].test(code.value);

※ 他に気になること

  • tell は綴りが違わないか
  • else のところのインデントがずれてる
  • 最後の2行とも、セミコロン不要
  • 関数名 RegEx、変数名 obj2 は命名が雑
  • 非表示は style.opacity より style.visibility で切り替えたほうが意味的には良さそうに思う

投稿2019/10/05 05:14

編集2019/10/05 05:28
tanishi_a

総合スコア484

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

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

0

codeはElementでcaseは文字列なので何も一致しないと思います。

投稿2019/10/04 19:21

m.ts10806

総合スコア80850

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

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

0

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 [].forEach.call(document.querySelectorAll('[pattern]'),x=>{ 4 x.addEventListener('change',e=>{ 5 var t=e.target; 6 var reg=new RegExp("^"+t.getAttribute("pattern")+"$"); 7 t.style.backgroundColor=t.value.match(reg)?"#ffffff":"#eeedb2"; 8 }); 9 }); 10}); 11</script> 12<input type="text" pattern="[0-9]{7}" placeholder="7文字"><br> 13<input type="text" pattern="[0-9]{11}" placeholder="11文字"><br>

投稿2019/10/07 02:38

yambejp

総合スコア114839

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問