VeeValidateでカスタムバリデーションを実装する

こんにちは、フロントエンドエンジニアのてりーです。

Veevalidateに備わっているバリデーション以外のバリデーションを実装する場合はカスタムルールを自作する必要があります。

そもそも備わっているバリデーションは何があるの?

ここに利用可能なルール一覧があります。

https://vee-validate.logaretm.com/v4/v4/guide/global-validators#available-rules

よく使う所だと「email」、「min」、「max」辺りですかね。

カスタムバリデーションの作り方

上記のrule以外を自分で実装する場合はカスタムバリデーションを作る必要があります。

基本形は以下のようになります。

//ルール名
extend(test', {

 //引数
 params: [
  {name: '',}
 ],

 //エラーメッセージ
 message: 'だめよ〜ん',

 //バリデーションルール
 validate(value, {name}) {
  return value !== name;
 }
});

実例:メールアドレス(サブ)入力時に「メールアドレス(メイン)と同一の値を取れない」を実装する

イメージを掴み為に具体的な実例も見ていきましょう。

extend('emailUnique', {
  //メールアドレス(メイン)を受け取る
    params: ['target'], 

  //value(入力値)とメールアドレス(メイン)が一致したらmessageを返す
    validate(value, { target }) {
      return value !== target
    },
   
    //メッセージ
    message: 'メールアドレス(A)と同じ値は設定できません。'
  })
 ```
 <validation-provider
          name="メールアドレス(サブ)"
          :rules="'email|max_string:100|emailUnique:@メールアドレス(メイン)'"
        >

割と簡単に実装できましたね。

以上です。

初めてweb開発の現場に入った時にVue.jsの勉強用に買った本を思い出に添付。