LoginSignup
2
3

More than 3 years have passed since last update.

v8nを使ってVue.jsでバリデーションをかけてみた

Last updated at Posted at 2019-06-24

はじめまして、普段はproduct managerをやっているtatsukenと申します。
研修の一環でvue.js、expressを書くことがあったので、そのことを中心にまとめていきたいと思います

何をするのか

v8nというnode moduleを使用してvue.jsの入力フォームにバリデーションをかけていきたいと思います。
vue.jsの一般的なバリデーションライブラリとしてはvee-validateなどがありますが、
v8nは簡単にバリデーションをかけたいときやバリデーションのカスタマイズを行いたいときに便利です。

使い方

install(vue project)

npm install v8n -s 

Sample code

sample.vue
<template>
  <form action>
    <input type="text" v-model="email">
    <input type="password" v-model="password">
    <input type="text" v-model="email">
    <input type="submit" value="decide" @click="onClickSubmitButton">
  </form>
</template>

<script>
import v8n from "v8n";
export default {
  data() {
    return {
      email: null,
      password: null
    };
  },
  methods: {
    onClickSubmitButton() {
      const message = {
        null: "中身が空です",
        minLength: "文字数は4文字以上です",
        pattern: "emailを入力してください",
        maxLength: "文字数が多すぎます"
      };
      try {
        v8n()
          .not.null() // 値がnullじゃないか
          .string() // 文字列
          .minLength(4) // a@b.c を想定して最低5文字
          .pattern(/[^\s@]+@[^\s@]+\.[^\s@]+/)
          .check(this.email);
      } catch (ex) {
        let rule = ex.rule.name;
        alert(`Emailに関して${message[rule]}`);
        return;
      }
      try {
        v8n()
          .not.null()
          .string()
          .minLength(4)
          .check(this.password);
      } catch (error) {
        let rule = error.rule.name;
        alert(`passwordに関して${message[rule]}`);
        return;
      }
    }
  }
};
</script>

説明

  • まずv8nをimportimport v8n from "v8n";
  • v8n()に様々な設定を加えていくことで様々なバリデーションを作ることが出来ます。
code rule
null() nullかどうかを判定する
not.null() null出ないかどうかを判定する
string() stringかどうかを判定する
minLength(4) 4文字以上かどうかを判定する
pattern(/[^\s@]+@[^\s@]+.[^\s@]+/) patternに一致しているかどうかを判定する(今回はemailのpattern maching)
  • 他にも様々なruleをつけることが出来ます(詳しくはこちらにまとまっていました)
  • 加えた条件に対して.check(変数名)を行うことで任意の変数が自分の設定したruleに一致しているか判定することができます
  • あとはpromiseなりtry catchなりでerrorを受け取り、エラーハンドリングを行ってください
  • errorの場合どのruleによってerrorになったかはerror.rule.name;などで受け取ることが出来ます。

参考にしたもの

 最後に

ざっくりとv8nの使い方について説明しました。
初めての投稿なので間違いなどあれば指摘していただけると幸いです。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3