【フォームブリッジ】メールアドレスのドメインチェック

背景・実現したいこと

フォームブリッジにて、メールアドレス入力欄を設置しますが、入力できるメールアドレスのドメインを制限したいです。

指定したドメイン以外のメールアドレスが入力された場合、エラーとなるようにしたいです。

 

初心者のため、これができるのかどうかも分かりませんが、ご教示いただければ幸いです。

NKIさん

こんにちは。

 

JavaScriptであれば可能です。

先日、似たような質問に回答しましたので、そちらご案内します。

【フォームブリッジ】携帯番号のみを入力できるようにしたい

 

この電話番号の文字列判定部分を変更してみてください。

ご不明点ありましたら、ご返信ください。

koichi様

こんにちは。

コメントありがとうございます。

 

リンクいただいたページを参考に、やってみました。

ドメイン指定部分の正規表現の書き方に迷いましたが、無事できました。

※正規表現も初心者のため

ありがとうございました。

 

(function() {

    ‘use strict’;

    fb.addValidators = function(state) {
        return {
            regex_validation: {
                // エラーメッセージ内容
                getMessage: function(fieldCode, params) {
                    return ‘指定ドメインのメールアドレスを入力してください。’;
                },
                // エラー判定条件
                validate: function(value, params) {
                    if (value.match(/@formbridge.com$/)) {
                        // 問題なし
                        return true;
                    } else {
                        // 違うとき
                        return false;
                    }
                }
            }
        }
    };

    fb.events.form.created = [function(state) {
        // 全フィールドからエラーを出したいフィールドを検索
        state.fields.filter(function(field) {
            // エラーを出したいフィールド
            return field.code === ‘メールアドレス’;
        })[0].validations.push({
            params: [],
            rule: ‘regex_validation’  // fb.addValidatorsで定義した中から適用したいバリデーション名
        });
        return state;
    }];

})();

koichi様

 

無事解決!と投稿しましたが、追加で質問させてください。

エラーを出したいフィールドが2つ以上ある場合、どうなるでしょうか?

下記のように書いてみましたが、最初のAの分のみ反応がありました。

 

 // エラーを出したいフィールド
            return field.code === ‘メールアドレスA’;
            return field.code === ‘メールアドレスB’;

2つある場合は、それぞれに対して.validations.pushしないといけません。

繰り返し処理を使えば、もう少し汎用性の高い書き方もできますが、ひとまず2つ並べた形です。

fb.events.form.created = [function(state) {

  // 全フィールドからエラーを出したいフィールドを検索
  state.fields.filter(function(field) {
    // エラーを出したいフィールド
    return field.code === 'メールアドレスA';
  })[0].validations.push({
    params: [],
    rule: 'regex_validation'  // fb.addValidatorsで定義した中から適用したいバリデーション名
  });

  // 全フィールドからエラーを出したいフィールドを検索
  state.fields.filter(function(field) {
    // エラーを出したいフィールド
    return field.code === 'メールアドレスB';
  })[0].validations.push({
    params: [],
    rule: 'regex_validation'  // fb.addValidatorsで定義した中から適用したいバリデーション名
  });

return state;

}];

koichi様

 

何度もありがとうございます。

メールアドレスAもBも設定ができました。

繰り返し処理という書き方もあるのですね。そちらも勉強してみます。

いつもありがとうございます。

記載された内容と同じことを実現したく、上記のスクリプトを利用させていただきました。

ただ、こちらの環境だと、メールアドレス欄のドメインチェックは正常に動作しているように

見えるものの、この内容で登録しようとすると、正常に登録されず、次画面に遷移しませんでした。

挙動としては、これを設定したメールアドレス欄に入力エラーがあるかのように、

その欄の位置に自動でスクロールされるのですが、エラーメッセージ自体は表示されていません。

もし同じ挙動で発生し、解決された方がいれば、解決策をご教示いただけるとありがたいです。

Tessaiさん

こんにちは。

 

非表示にしているフィールドはありませんか?

挙動的に非表示フィールドにエラーが出ているような気がします。

koichi様

ご指摘の通り、非表示フィールドがいくつかあります。

それらをいったん解除してみて、挙動を再確認してみます。

ご指摘、たいへんありがとうございます。

koichi様

非表示フィールドをすべて表示状態にして検証しましたが、

エラーが表示されている項目はやはりないのに、項目エラーの挙動で

上にスクロールしました。スクロールした場所が、項目のある位置よりも上のようですので、

別の原因かもしれません。このフォームには他に4つのJavascriptをセットしているので、

それらのいずれかとの干渉が原因なのかもしれません。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。