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

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

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

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

Q&A

解決済

1回答

1325閲覧

年月日のバリデーションを行いたい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2021/04/22 06:24

編集2021/04/22 06:46

前提・実現したいこと

フォームから入力された年月日が正しいかどうかのバリデーションを行いたいです。

入力の形式は yyyy/mm/dd を想定しています。

発生している問題・エラーメッセージ

処理内の change_year に値が渡ってきていないようなのですが、理由がわからないです。

2つめの
error.innerHTML = '入力内容が正しくありません';
が表示されます。

学習中の身につき、初歩的な点が原因かもしれませんがヒントをいただければと思います。

該当のソースコード

<form> 年月日:<input type="text" id="year" value="" style="width:100px;" placeholder="例:2020/01/01"><br><br> <input type="button" id="btn" value="ボタン"><br><br> </form> <p id="error"></p><br><br> <p id="answer"></p> // 曜日の表示 var answer = document.getElementById('answer'); // エラーメッセージ var error = document.getElementById('error'); // ボタン 通常時は無効 var btn = document.getElementById('btn'); btn.disabled = true; // 入力されたtextboxのID取得 var year = document.getElementById('year'); // 入力された値の取得 var year_num = year.value; // Date型に変換 var change_year = new Date(year_num); // 入力された年月日から曜日を取得 var get_date = change_year.getDay(); // 曜日 var ary = ['日','月','火','水','木','金','土']; year.addEventListener('focusout',function(){ if(!year_num.match(/^\d{4}/\d{2}/\d{2}$/)){ error.innerHTML = '入力内容が正しくありません'; } var y = year_num.split("/")[0]; var m = year_num.split("/")[1] - 1; var d = year_num.split("/")[2]; if(change_year.getFullYear() !== y || change_year.getMonth() !== m || change_year.getDate() !== d){    // Invalid Date と表示される    // console.log(change_year); error.innerHTML = '入力内容が正しくありません'; } else{ btn.disabled = false; btn.addEventListener('click',function(){ answer.innerHTML = ary[get_date] + '曜日'; }, false); } }, false);

試したこと

変数 change_year の場所を色々変えてみましたが、うまく動作しませんでした。

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

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

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

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

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

maisumakun

2021/04/22 06:35

HTMLはどのようになっていますか?
退会済みユーザー

退会済みユーザー

2021/04/22 06:38

ありがとうございます。 <form> 年月日:<input type="text" id="year" value="" style="width:100px;" placeholder="例:2020/01/01"><br><br> <input type="button" id="btn" value="ボタン"><br><br> </form> このように書いています。
m.ts10806

2021/04/22 06:42

質問は編集できますので
退会済みユーザー

退会済みユーザー

2021/04/22 06:47

ありがとうございます。 編集しました。
退会済みユーザー

退会済みユーザー

2021/04/22 07:22

おかげさまで解決致しました。 ありがとうございました。
guest

回答1

0

ベストアンサー

とりあえず year_num.match -> year.value.match してみてください。

投稿2021/04/22 06:29

kei344

総合スコア69606

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

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

退会済みユーザー

退会済みユーザー

2021/04/22 06:43

ありがとうございます。 ご指摘いただいた箇所のみ変更→変化なし それ以外のところも year_num→year.valueに変更→変化なし でした。
kei344

2021/04/22 06:51

year_num.split とかも変えてますか? そもそもyear_numをイベント外で定義しているのが問題なので、そこを見直してください。
退会済みユーザー

退会済みユーザー

2021/04/22 07:00

全て変更しましたが、変わりませんでした。 「イベント外で定義〜」などの知識が足りていない自覚があるので、その辺りを調べ直してみます。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2021/04/22 07:23

教えていただいたことをもとに、解決致しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問