Microsoft Formsでメールアドレスと電話番号のバリデーション(入力チェック)したかったのでその方法についての記事になります。
たとえば、下記をチェックします。
- 郵便番号入力欄に7桁の数字が入っているか、
- パスワード入力欄に入力された入力値が半角英数字のみか、
- 氏名入力欄が全角文字になっているか、
- などなど。
Microsoft Formsにはメールアドレスや電話番号のバリデーションがない?
Microsoft Formsでメールアドレスと電話番号のバリデーション機能はありません。
Microsoft Formsのバリデーション機能は数値型のチェックのみとなります。このため、メールアドレスや電話番号などのテキスト記入欄を作っても、ユーザが入力ミスをした際に、ユーザは気づけないままフォームを送信してしまうケースがあります。
この点をみるとGoogle Formsに比べて機能面で劣っているように感じてしまいますが、Microsoft Formsには上位製品のDynamics 365 Customer Voice(旧:Microsoft Form Pro)があり、そちらではデフォルトでメールアドレスのバリデーションがありますし、正規表現を使ってバリデーションすることもできる機能もありますので、 Microsoft Formsに機能がないことは、上位製品との差別化を図る意味があるのだと思います。
つまり、高度なバリデーションを実装したい場合は、Dynamics 365 Customer Voiceの購入を検討しましょう、ということなのですが、Microsoft Formsでもフォームを送信した後でしたら、Power Automateを使って入力チェックする方法がありましたので紹介したいと思います。先にお伝えしておきますと、この方法は組織内向けのフォームでつかいどころあるかなぁーという感じの内容で、組織外に公開するフォームでは使えないかなと思います。
Dynamics 365 Customer Voiceとは?
顧客向けのフォーム(組織外部向けフォーム)は、 Dynamics 365 Customer Voiceを検討してみると良さそうです。
- Microsoft Dynamics 365の製品群のひとつでフィードバック管理を目的にしたサービスです。
- わたしは試用版を少し触っただけなので知識がありませんが、フォームによるフィードバック収集だけではなく、AIによる分析・追跡まで行えるとのことなので、かなりできることは多そうです。
詳細はこちらのMicrosoft公式ページをご覧ください。
前提条件
今回紹介する方法には下記の環境が必要がです。
- Microsoft 365 Business Standard以上のライセンス(Office Scriptsを利用するため)
- Power Automateを利用できる環境
Microsoft Formsでメールアドレスと電話番号の入力値の正常性をチェックする方法
Power AutomateとOffice Scriptsを使って入力チェックを行います。
フローを作成する手順
- STEP_A フォームを作成する。
- STEP_B Office Scriptsを作成する。
- STEP_C Power Automateのフローを作成する。
フローの説明
フォーム送信をトリガーにしたPower Automateフローを作成して、その中で正規表現を使ってバリデーションします。Power Automateの関数に正規表現の機能がみつからなかったので、正規表現の部分はOffice Scripts(Excel online版のマクロ)を使って補完しました。
- フォームが送信されたらフォームの情報を取得する。
- Office Scriptsにフォームの情報を渡してバリデーションを行う。
- 結果によって下記のいずれかの処理を行う。
- バリデーションOK:通常通り処理完了メールを送る。
- バリデーションNG:フォームの再送信をお願いするメールを送る。
メールアドレスのバリデーションがNGだった場合、フォーム送信者にメールでNGの旨を通知する仕様になっています。しかし、メールアドレスのバリデーションがNGの場合、組織外の方のメールアドレスは不明となりますのでメール送信ができません。この点が外部向けのフォームでは使えない理由です。
Power Automateフローの完成図
(STEP_A)フォームの作成
図のフォームで解説します。質問1にメールアドレスを、質問2に電話番号を入力してもらう想定です。
補足ですが、今回は電話番号は、ハイフンなしの形式を想定しているので、実際のフォームでは、ユーザに対してその旨を注意書きをした方が良いです。
下記のように質問を追加しました。
- 質問1.メールアドレス
- テキスト型、必須項目
- 質問2.電話番号
- テキスト型、必須項目
▲三点リーダーをクリックして設定をクリックします。
▲「自分の所属組織内のユーザのみが回答可能」の中の「名前を記録」にチェックを入れます。
この設定を行わないと、匿名配送になるので送信者のメールアドレスがwからずメールを配信することができません。必ず設定しましょう。
(STEP_B)Office Scriptsを作成します。(Officeスクリプト)
Office Scriptsのスクリプトを用意します。今回は下記のように書きました。
function main(workbook: ExcelScript.Workbook,mailaddress:string, phonenumber:string) { let regStr1 = /^[A-Za-z0-9]{1}[A-Za-z0-9_.-]*@{1}[A-Za-z0-9_.-]{1,}.[A-Za-z0-9]{1,}$/; //メアド正規表現 let reg1 = new RegExp(regStr1); let regStr2 = /^(0[5-9]0[0-9]{8}|0[1-9][1-9][0-9]{7})$/; //電話番号正規表現 let reg2 = new RegExp(regStr2); let result: regexResult; let mailBool: boolean = false; let phoneBool: boolean = false; if (reg1.test(mailaddress)) { mailBool = true; } else { mailBool = false; } if (reg2.test(phonenumber)) { phoneBool = true; } else { phoneBool = false; } result = { mailAddress: mailBool, phoneNumber: phoneBool, }; return result; } interface regexResult { mailAddress: boolean; phoneNumber: boolean; }
Officeスクリプトを始めて使う方は下記の記事で使用方法を解説していますのでよろしければご覧ください。
(STEP_C)Power Automateフローの作成手順
フロー作成しまーす。
Power Automateホーム画面はこちらです。
①左側メニューの中の「作成」をクリックして、②「自動化したクラウドフロー」をクリックします。
▲①フロー名に任意の名前を入力します。②Formというキーワードで検索して「新しい応答が送信されるとき」トリガーを選択します。③作成ボタンをクリックします。
▲「新しい応答が送信されるとき」トリガーのフォームIDにSTEP_Aで作成したフォームの名前を選択します。
▲トリガーの下の「新しいステップ」をクリックしてアクションを追加します。
▲「Microsoft Forms」コネクタの中の「応答の詳細を取得する」アクションを追加します。
Microsoft Formsのフォームの中の情報を取得するには?
フォームの中身の情報を取得するために「応答の詳細を取得する」アクションを使います。
▲Excelコネクタの中の「スクリプトの実行」アクションを追加します。
- 場所:スクリプトを実行するExcelファイルが保存されている場所を選択します。
- ドキュメントライブラリ:スクリプトを実行するExcelファイルが保存されているライブラリを選択します。
- ファイル:スクリプトを実行するExcelファイルを選択します。
- スクリプト:スクリプトファイル名を選択します。STEP_Bで作成したOfficeスクリプトのファイル名を選択します。
- mailaddress(スクリプトの入力値):「応答の詳細を取得する」アクションの動的コンテンツである「メールアドレス」を選択します。
- phonenumber(スクリプトの入力値):「応答の詳細を取得する」アクションの動的コンテンツである「電話番号」を入力します。
5.6のスクリプトの入力値は、下図のようにスクリプトの引数名が表示されます。
▲コントロールコネクタの中にある「条件」アクションを追加します。
⓵に下記の2つの条件式を入力します。
- mailaddress , 次の値に等しい , true
- phonenumber, 次の値に等しい, true
②「and」を選択します。
メールアドレスと電話番号のバリデーションをどちらもクリアした場合の処理となります。
▲「Outlook 365」コネクタの中にある「メールの送信」アクションを追加します。
- 宛先:「応答の詳細を取得する」アクションの動的コンテンツである「Responders’ Email」を選択します。
- 件名:任意の件名を入力します。
- 本文:メール本文を入力します。下記のように入力しました。
お疲れさまです。 フォームの送信ありがとうございます。 下記のとおり受け付けました。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 入力内容 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【メールアドレス】@{outputs('応答の詳細を取得する')?['body/r32b379b4c4014a92a9e7b673b1a0b22f']} 【電話番号】@{outputs('応答の詳細を取得する')?['body/r0ccbc163a25449789067c7eae4514504']}
メールアドレスと電話番号のバリデーションをどちらか一方あるいはどちらもNGとなった場合の処理です。
▲「Outlook 365」コネクタの中にある「メールの送信」アクションを追加します。
- 宛先:「応答の詳細を取得する」アクションの動的コンテンツである「Responders’ Email」を選択します。
- 件名:任意の件名を入力します。
- 本文:メール本文を入力します。下記のように入力しました。
バリデーションがNGとなった旨を送信者に伝えるようにメール本文を作成します。
お疲れさまです。 フォームの送信ありがとうございます。 入力内容に誤りがあるようです。お手数おかけして恐縮ですが、下記の入力内容をご確認いただきまして再度送信をお願い致します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 入力内容 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【メールアドレス】@{outputs('応答の詳細を取得する')?['body/r32b379b4c4014a92a9e7b673b1a0b22f']} 【電話番号】@{outputs('応答の詳細を取得する')?['body/r0ccbc163a25449789067c7eae4514504']}
フローの作成が完了しましたのでフォームを送信してテスト実行してみましょう。
▲Microsoft Formsからターゲットとなるフォームを開き、画面右上のプレビューをクリックします。回答を受け付けるモードになりますので回答を入力して送信します。
▲フォームを送信しましたら、Outlook にメールが送信されますのでメールを確認してみましょう。OKパターン・NGパターン組み合わせてテストしてみて問題がなければ成功です!
Office Scriptsのサンプルコード
先のコードはメールアドレスと電話番号をチェックしました。下記はメールアドレスだけチェックする場合のコードです。
function main(workbook: ExcelScript.Workbook,mailaddress:string):boolean { let regStr = /^[A-Za-z0-9]{1}[A-Za-z0-9_.-]*@{1}[A-Za-z0-9_.-]{1,}.[A-Za-z0-9]{1,}$/; let reg = new RegExp(regStr); let result:boolean; if (reg.test(mailaddress)) { return result = true; } else { return result = false; } }
まとめ
以上、Office Scriptsの正規表現を使ったMicrosoft Formsの入力チェックの方法について解説しました。
何度もいいますが、組織外部向けフォームでは使えないので、ちゃんとバリデーションしたい方はDynamics 365 Customer Voiceの購入を検討しましょう!