Vue.jsのフォームバリデーションを実装する。
- CREATE:2022-07-03
- UPDATE:2022-07-10
画像:pixabayより
今回やること
ログイン認証のフォームバリデーションを実装します。
基本となるソースコード
ここから、書いていきましょう。(VScodeを使って書いてます。)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<div id="app">
<div>
<label for="email">メールアドレス</label>
<input type="email" name="email" v-model="email" id="email" />
</div>
<div>
<label for="password">パスワード</label>
<input
type="password"
name="password"
v-model="password"
id="password"
/>
</div>
<div>
<input type="submit" value="ログイン" v-bind:disabled="check" />
</div>
</div>
<!-- 開発バージョン、便利なコンソールの警告が含まれています -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>
var app = new Vue({
el: "#app",
data: {
email: "",
password: "",
},
computed:
{
check:function()
{
//ここに色々書いていきます。
}
}
});
</script>
</body>
</html>
こうなればOKです。
僕はライブラリを使わずにバリデーションを行う場合、Vueの「computed」を使っています。
次にsubmitボタンにv-bind:disabledを追加します。
<input type="submit" value="ログイン" v-bind:disabled="check" />
事例1:メールアドレスとパスワードをそれぞれ1文字以上入力しているか
computed: {
check: function () {
//メールアドレスとパスワードを入力している場合
if (this.email && this.password) {
return false;
}
//違う場合
else {
//ボタンを押せなくする
return true;
}
},
},
事例2:メールアドレスとパスワードがそれぞれの形式に合っているか
- メールアドレス:○○○@○○○.○○○
- 半角数字、半角小文字、半角大文字をそれぞれ1文字ずつ&8文字~20文字まで
computed: {
check: function () {
//メールアドレスとパスワードの形式を満たす場合
if (this.email.match(/[\w\d_-]+@[\w\d_-]+\.[\w\d._-]+/) && this.password.match(/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]{8,20}$/))
{
return false;
}
//違う場合
else {
return true;
}
},
},
あとがき
Vue.jsは本当に便利です。