実現したいこと
Google Formの回答ページを作る際に、
回答者に同じ情報を続けて2回入力させて、その2つの入力内容が相違した時に、エラーメッセージを表示させて、
それが修正されるまでは回答の完了をさせないようにしたい。
例えば電話番号を入れさせる際に、2回同じものを入力させて、その2つに相違があれば入れ間違いだと表示したい。
前提
ここに質問の内容を詳しく書いてください。
(例)
TypeScriptで●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
そもそもGoogle Formのフォーム開発ツールの標準機能にはこの機能が無いらしく、scriptなどで対応するしかないらしい。
試したこと
ChatGPTで以下の質問をしたところ、いくつかの回答を得たが、どれを試してもNGであった。
そもそも回答に書かれたオプションが存在しない。
また、scriptを工夫すればできそうな感触はあるが、そもそもscriptを実装した経験が無くて、
正しい実装方法が確立できない。
ChatGPTに質問した内容
「google formを使用して同じ内容を2回入力させて、かつその2つが同じ綴りである場合にのみokとするフォームを作成できますか」
回答1
申し訳ありませんが、私は実際のソフトウェアやサービスにアクセスすることができないため、具体的な機能の有無や設定方法について確認することはできません。Google フォームに関する最新の機能やオプションについては、公式のドキュメントやGoogle フォーラムなどを参照してください。 ただし、一般的なアイデアとして、Google フォームのスクリプトエディタを使用して、特定の要件を満たすためのカスタムスクリプトを作成することができる可能性があります。Google Apps Script を使用して、フォームの送信時に2つの回答を比較し、同じ綴りである場合にのみフォームを受け付けるように制約を追加することができます。 ただし、このようなカスタムスクリプトの作成には、JavaScript や Google Apps Script の基本的な知識やプログラミングスキルが必要となる場合があります。Google Apps Script の使用方法やフォームの操作に関する詳細な情報を提供することはできませんが、公式のドキュメントやオンラインのリソースが利用できるかと思います。 もし、Google フォームのカスタマイズや特定の要件の実現に困難を感じる場合は、Google サポートや開発者コミュニティに相談することをおすすめします。彼らはより具体的なガイダンスやサポートを提供することができます。 申し訳ありませんが、Google フォームのデフォルト機能では、同じ内容を2回入力させ、かつその2つが同じ綴りである場合にのみフォームを受け付けるような設定を直接行うことはできません。 ただし、Google フォームにはカスタムスクリプトを組み込むことができます。以下に、Google Apps Script を使用して同じ内容を2回入力し、その2つが同じ綴りである場合にのみフォームを受け付ける方法の一例を示します。 Google フォームを作成し、質問を追加します。 Google フォームの編集画面で、「スクリプトエディタ」を開きます。 スクリプトエディタで、以下のようなスクリプトを作成します:
javascript
1function validateForm(e) { 2 var response = e.response; 3 var itemResponses = response.getItemResponses(); 4 5 if (itemResponses.length >= 2) { 6 var firstResponse = itemResponses[itemResponses.length - 2].getResponse(); 7 var secondResponse = itemResponses[itemResponses.length - 1].getResponse(); 8 9 if (firstResponse !== secondResponse) { 10 var form = FormApp.getActiveForm(); 11 form.setAcceptingResponses(false); 12 throw new Error("同じ内容を2回入力してください。"); 13 } 14 } 15}
スクリプトエディタで、「トリガー」(時計のアイコン)をクリックし、新しいトリガーを作成します。トリガーを設定して、フォームの送信時に「validateForm」関数が実行されるようにします。 これにより、フォームが送信された際に、最後の2つの回答が同じ綴りであるかどうかをチェックし、異なる場合にフォームを受け付けないようにします。 なお、このスクリプトは一例であり、実際の要件に合わせてカスタマイズする必要があります。また、正確な実装方法や詳細な手順については、Google Apps Script のドキュメントや開発者コミュニティを参照してください。
回答2
Google フォームにアクセスします。 質問の追加ボタン(+)をクリックして、テキスト入力欄の質問を追加します。 質問の設定アイコン(歯車のアイコン)をクリックして、質問の設定を開きます。 「回答の種類」を「テキスト」に設定します。 「2 つ目の回答を要求」オプションを有効にします。これにより、同じ内容を2回入力するようになります。 「回答の検証」オプションを有効にします。 「正規表現」を選択します。 「正規表現パターン」には、以下の正規表現を入力します:^(.*)$ (この正規表現は、入力されたテキストが任意の文字列であることを表しています) 「2 つ目の回答と比較する」オプションを有効にします。 「同じである場合」を選択します。 「必須にする」オプションを有効にします。 質問の設定を保存します。 他の質問やフォームの設定を追加して、フォームを完成させます。 フォームの共有方法を選択し、必要な場合は回答者にフォームへのアクセス権を提供します。
→ 「「2 つ目の回答と比較する」オプションを有効にします。」とあるが、そのようなオプションは存在しない
その他、いくつも"Regenerate response"で他の回答を得たが、存在しないオプションばかり出てくる。
この場でChatGPTの評価をするつもりはないが、第一希望はフォーム作成時の何らかのオプションで実現、第二希望はscriptで解決です。
あまり込み入った機能を要求している認識はないのですが、どなたかこの実装に成功した方のknowledgeを共有させていただけませんでしょうか。
#該当するソースコード
ps
1一例(ただし、実装の方法がわからない) 2function onFormSubmit(e) { 3var form = FormApp.getActiveForm(); 4var responses = form.getResponses(); 5var response = responses[responses.length - 1]; 6var itemResponses = response.getItemResponses(); 7 8var firstResponse = itemResponses[0].getResponse(); 9var secondResponse = itemResponses[1].getResponse(); 10 11if (firstResponse == secondResponse) { 12// OK 13} else { 14// 同じ綴りではない場合の処理 15var formResponse = form.createResponse(); 16var items = form.getItems(); 17for (var i = 0; i < items.length; i++) { 18var item = items[i]; 19formResponse.withItemResponse(item.asTextItem().createResponse("")); 20} 21formResponse.submit(); 22} 23}
ここにより詳細な情報を記載してください。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。