フォームブリッジ バリデーション設定時のincludedについて

文字列1行のフィールドで、6文字以上の半角数字が入力された場合に「有効な値ではありません」と表示したく設定をしています。

(function() {
  "use strict";

  fb.events.form.created = [function (state) {
    state.fields[30].validations.push({ rule: 'included', params: /^([0-9]{6})$/ });

    return state;
  }];
})();

上記のコードを実行すると1文字入力するだけで「Please enter a valid value.」をエラーが出ます。パラメーターの設定が誤っていると思うのですがどこを修正すれば分からずにいます。ご教授よろしくお願いします。

SHOHさん

こんにちは。

 

そちらですと「6桁の数字の場合はOK」ということになるのではないでしょうか。

「0〜5桁の半角数字」という形に変更するといかがでしょうか。

/^([0-9]{0,5})$/

koichiさん

お返事ありがとうございます。

パラメータを /^([0-9]{0,5})$/ に変更してみましたが、結果は1文字目から「Please enter a valid value.」表示されてしまいます。

フォームブリッジのカスタイズにあるバリデーションの項目で「included」はパラメータを下記のように指定するとあるのですが、こちらの理解が足りずに実現できずにいます。

  • Parameters
    • [list] (ex: [option1,option2,option3])

SHOHさん

ご確認ありがとうございます。
正規表現は別にruleがありましたね。
includedでなくregexに変えてみてください。

includedは配列で渡した値を含むかどうかの判定と思いますので、恐らく正規表現が使えないものかと。

koichiさん

rule を regex に変更したところ6文字以上でエラーとなりました。

「入力できないフォーマットです」と表示されますがCSSで文章を変更してやりたいことが実現できそうです。ありがとうございました。

includedは配列処理の時に使用できるということですね。勉強になりました。

最後にもう1つだけ教えていただきたいのですが、下記のように配列の宣言内容に正規表現は使用できないということでしょうか。

var array = [/^([0-9]{6})$/];

 

SHOHさん

正常に動作して良かったです。

試してみましたが、includedは正規表現は使えなかったです。

なお、エラーメッセージを変更する際は以下のような形で、バリデーションをオリジナルに設定することも可能です。

(function() {

    'use strict';

        fb.addValidators = function(state) {
        return {
            length_validation: {
                // エラーメッセージ内容
                getMessage: function(fieldCode, params) {
                    return 'ここにエラーメッセージを表示';
                },
                // エラー判定条件
                validate: function(value, params) {
                    if (value.match(/^([0-9]{0,5})$/)) {
                        // 入力形式OKの場合
                        return true;
                    } else {
                        // 入力形式NGの場合
                        return false;
                    }
                }
            }
        }
    };

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

})();

koichiさん

> 試してみましたが、includedは正規表現は使えなかったです。

includedで正規表現が使えないこと承知しました。

サンプルコード大変助かります。今回のバリデーションもこちらを参考にメッセージ変更を試してみたいと思います。

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

 

 

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