DEV

vee-validate.jsの使い方

VeeValidate

インストール

Terminal window
$ yarn add vee-validate

有効化

vueで使えるようにします。

src/plugins/vee-validate.js

import Vue from 'vue'
import VeeValidate, { Validator } from 'vee-validate'
import ja from 'vee-validate/dist/locale/ja'
Validator.localize('ja', ja)
Vue.use(VeeValidate, {
locale: ja,
dictionary: {}
})

localeをjaにすると、デフォルトエラーメッセージも日本語になります。

上記をmain.jsで読み込みます。

src/main.js

import './plugins/vee-validate'

使い方

ここに書いてあります。下記は新規登録画面のサンプルです。vuetifyを使っています。

<template>
<v-content class="content_wrap">
<v-container
grid-list-lg
style="max-width: 1200px;"
>
<h2 class="page-title text-xs-center">新規登録</h2>
<v-layout row justify-center>
<v-flex xs12 sm10 md6>
<v-card class="pa-3">
<form>
<v-card-text>
<v-text-field
v-model="email"
name="email"
label="メールアドレス"
data-vv-as="メールアドレス"
v-validate="'required|email'"
:error-messages="errors.collect('email')"
required
></v-text-field>
<v-text-field
v-model="password"
name="password"
label="パスワード"
data-vv-as="パスワード"
messages="半角英小文字、大文字、数字をそれぞれ1種類以上含む、8~32文字で入力ください。"
v-validate="'required|min:8|max:32|password'"
:error-messages="errors.collect('password')"
required
type="password"
ref="password"
class="mt-3"
></v-text-field>
<v-text-field
v-model="password2"
name="password2"
label="パスワード(確認)"
data-vv-as="パスワード"
v-validate="'required|confirmed:password'"
:error-messages="errors.collect('password2')"
required
type="password"
class="mt-3"
></v-text-field>
</v-card-text>
<v-card-actions>
<v-btn
@click="submit"
:loading="loading"
color="primary"
>
新規登録
</v-btn>
</v-card-actions>
</form>
</v-card>
</v-flex>
</v-layout>
</v-container>
</v-content>
</template>
<script>
export default {
data: () => ({
email: '',
password: '',
password2: '',
loading: false
}),
methods: {
async submit() {
this.loading = true
const result = await this.$validator.validateAll()
if (!result) return this.loading = false
this.send()
},
async send() {
const data = {
email: this.email,
password: this.password
}
const result = await this.$store.dispatch('auth/register', data)
if (result) {
this.email = ''
this.password = ''
this.password2 = ''
this.$router.push('login');
}
this.$validator.reset()
this.loading = false
}
}
}
</script>

パスワードの確認はこれを使ってます。 「半角英小文字、大文字、数字をそれぞれ1種類以上含む」というのをpasswordという独自ルールで対応してます。

独自ルールの作り方

先程のvee-validate.jsに追記します。

src/plugins/vee-validate.js

import Vue from 'vue'
import VeeValidate, { Validator } from 'vee-validate'
import ja from 'vee-validate/dist/locale/ja'
Validator.localize('ja', ja)
Validator.extend('doui', {
getMessage: () => '同意してください',
validate: value => !! value
})
Validator.extend('password', {
getMessage: () => '半角英小文字、大文字、数字をそれぞれ1種類以上含めてください',
validate: value => {
if (! value.match(/\d/)) return false;
if (! value.match(/[a-z]/)) return false;
if (! value.match(/[A-Z]/)) return false;
return true;
}
})
Vue.use(VeeValidate, {
locale: ja,
dictionary: {}
})

Validator.extendというのを使うと、独自ルールが作れます。